在Winform应用程序中,我想使用单个后台工作程序(或者每个表单可以使用一个)来对不同的事件执行不同的任务。例如:搜索,在网格中加载数据,打开新表单,发送电子邮件,文件传输等。
如何在backgroundWorker_DoWork()和backgroundWorker_RunWorkerCompleted()事件中管理所有这些?
这样做的最佳方法/最佳做法是什么?
答案 0 :(得分:2)
通常情况下,我最终会使用一个参数来调用worker,如下所示:
backgroundWorker.RunWorkerAsync(<some argument here>);
然后在你的DoWork方法中,你可以从e.Argument
检索参数,并根据参数是什么,你知道你想用它做什么。
如果您不需要其他任何参数,您可以使用所需的值创建一个枚举,例如Search
,Load
等等,然后将其传入,然后检查在DoWork中选择您想要做的事情。请记住,由于e.Argument是一个对象,你必须回到Dowork内部的枚举。
关于RunWorkerCompleted,您可以使用DoWork中的值填充e.Result,并在RunWorkerCompleted方法中检索它。
这是最好的方法,并且一直是线程安全的。