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