C# 如何从当前执行的方法中获取BackgroundWorker的实例?

C# 如何从当前执行的方法中获取BackgroundWorker的实例?,c#,multithreading,backgroundworker,C#,Multithreading,Backgroundworker,我使用的backgroundworker可以有n个实例。问题是DoWork方法(有'sender'参数,即BackgroundWorker)调用其他生成回调的代码——因此我没有发送者 如何确定当前代码运行的BackgroundWorker 例: 我可能只是忽略了一些东西(除非线程池是有序的:-() 我相信这是很容易做到的后台工作…有什么想法吗 编辑 我在我的描述中造成了一些混乱,这里还有一些事实:-) 1.)我已经调用了bw.RunWorkerAsync() 2.)调用事件方法CalledFr

我使用的backgroundworker可以有n个实例。问题是DoWork方法(有'sender'参数,即BackgroundWorker)调用其他生成回调的代码——因此我没有发送者

如何确定当前代码运行的BackgroundWorker

例:

我可能只是忽略了一些东西(除非线程池是有序的:-()

我相信这是很容易做到的后台工作…有什么想法吗


编辑 我在我的描述中造成了一些混乱,这里还有一些事实:-) 1.)我已经调用了bw.RunWorkerAsync() 2.)调用事件方法CalledFromeventCallback的类不知道后台线程 3.)由于设计要求,我不能将Backgroundworker作为参数

谢谢:-)

您能否将“发送方”作为参数发送到回调,并以这种方式获取BGW?

您希望使用接受参数的方法,该参数随后作为事件参数的属性提供


然后,您可以将BackgroundWorker实例传递给BackgroundWorker方法。

据我所知,使用后台工作程序可能获得的最佳结果是(假设您目前提到的Constants):

BackgroundWorker.RunWorkerAsync(bw);

您的设计需求需要做一些工作。必须使用
BackgroundWorker.UpdateProgress
的方法不能将
BackgroundWorker
作为参数?我想,你可以修改戈登的答案,改为接受一名代表


如果需要这种关注点分离,那么使用4.0中的
任务
库可能会更愉快。它们将要完成的工作(“更新”代码)与该工作的日程安排分开。

实际执行该工作的最后一个块来自类的事件,它不知道后台工作人员:-(
BackgroundWorker.RunWorkerAsync(bw);
private void SetupThread()
{
    BackgroundWorker bw = new BackgroundWorker();
    // Assuming you need sender and e. If not, you can just send bw
    bw.DoWork += new DoWorkEventHandler(DoTheWork);
}

private void DoTheWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    MyClass.Callback = () => 
        {
            ((BackgroundWorker)bw).UpdateProgress(/*send your update here*/);
            MethodCalledFromEventCallback();
        };

    MyClass.DoSomething(); // This will produce a callback(event) from MyClass
}

private void MethodCalledFromEventCallback() 
{ 
    // You've already sent an update by this point, so no background parameter required
}