【发布时间】:2016-12-02 14:17:02
【问题描述】:
我正在使用 VS 2015 winform 后台工作人员执行一些任务。
我有使用List<string> myList 的DoWork() 方法,一旦某个过程完成,它就会删除列表中的每个条目。我的目标是让用户知道myList 中的哪个条目没有被处理(因为它会在每个进程之后删除一个条目,所以最后剩下的就是未处理的条目)。为此,我打算将myList 变量传递给RunWorkerCompleted(),但我不仅不知道该怎么做,我什至不确定这是否是最好的方法。
有没有更好的方法让用户知道myList 中的哪个条目没有被处理,如果没有,我如何将变量从 DoWork() 传递给 RunWorkerCompleted()?
当前的 RunWorkerCompleted() 方法:
private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if(e.Error != null)
{
MessageBox.Show(e.Error.ToString());
}
else
{
MessageBox.Show("Done!");
}
}
基本上,我希望 MessageBox 在完成运行任务时显示哪些条目未处理
【问题讨论】:
-
有什么理由不使用 async/await 而不是后台工作人员,因为这是推荐的方法?
-
我是初学者,所以我并不完全了解其中的区别,但我认为异步适用于基于 Web 的应用程序。我的是离线winform(比如没有网络连接,不使用服务器)
-
@djskj189
async对于任何处理异步操作的应用程序来说都是一个有用的工具。如果你有异步操作,你可以使用它。 -
@PeterBons 后台工作人员是一种在您进行后台工作时获得 UI 反馈的方法。你不能(很容易)用 async 和 await 做到这一点
-
@Emad 你绝对可以在不使用 BGW 的情况下做到这一点。您可以简单地使用
Progress实例。
标签: c# winforms visual-studio backgroundworker