c# - 在创建对象的线程上调用方法

标签 c# multithreading events

假设我在线程 T 上创建了一个对象 O。我如何从对象 O 内部获取线程 T 并在该线程上调用方法?这样,创建对象的表单就没有必要这样做:

    private void ChangeProgress(int value)
    {
        progressBar1.Value = value;
    }

    void FD_ProgressChanged(object sender, DownloadEventArgs e)
    {
        if (InvokeRequired)
        {
            Invoke(new Action<int>(ChangeProgress), new object[] { e.PercentDone });
        }
        else ChangeProgress(e.PercentDone);
    }

这很丑陋,需要使用该对象的人找出哪些事件是在创建该对象的同一线程上引发的,哪些不是并添加 if(InvokeRequired)...else 在没有的事件处理程序上添加代码,或者只在每个事件处理程序上添加代码。我认为如果对象本身负责在正确的线程上调用事件会更优雅。这可能吗?

最佳答案

使用 BackgroundWorker 类。它负责所有这些。请注意 ReportProgress 事件。

关于c# - 在创建对象的线程上调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512786/

相关文章:

javascript - 仅将更改应用于具有相同方法名称的多个元素中的单击元素

.net - Winforms 中的 VB.Net UserControl 关闭事件

c# - Microsoft Razor Syntax 如何在不向客户端公开的情况下运行服务器端代码?

c# - 一种避免浪费内存的方法

c# - 带有单元测试的 C# IDE(如 Eclipse for Java 和 assertEquals( ... ) 等)

javascript - jQuery addClass 和 removeClass 事件对悬停功能有奇怪的影响

c# - 异步日志记录抛出 NullReferenceException

c# - Parallel.ForEach 改变多个线程的行为

java - 停止扫描仪上阻塞的 Java 线程

python - wxpython - 在不阻塞 GUI 的情况下按顺序运行线程