根据条件在backgroundworker_DoWork()中分配工作

时间:2010-09-28 11:06:34

标签: c# .net sql winforms visual-studio-2008

在Winform应用程序中,我想使用单个后台工作程序(或者每个表单可以使用一个)来对不同的事件执行不同的任务。例如:搜索,在网格中加载数据,打开新表单,发送电子邮件,文件传输等。

如何在backgroundWorker_DoWork()和backgroundWorker_RunWorkerCompleted()事件中管理所有这些?

这样做的最佳方法/最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

通常情况下,我最终会使用一个参数来调用worker,如下所示:

backgroundWorker.RunWorkerAsync(<some argument here>);

然后在你的DoWork方法中,你可以从e.Argument检索参数,并根据参数是什么,你知道你想用它做什么。

如果您不需要其他任何参数,您可以使用所需的值创建一个枚举,例如SearchLoad等等,然后将其传入,然后检查在DoWork中选择您想要做的事情。请记住,由于e.Argument是一个对象,你必须回到Dowork内部的枚举。

关于RunWorkerCompleted,您可以使用DoWork中的值填充e.Result,并在RunWorkerCompleted方法中检索它。

这是最好的方法,并且一直是线程安全的。