C#等待异步操作完成

时间:2013-01-19 07:15:00

标签: c# multithreading asynchronous worker

我想知道我想要做的最好的方法是什么。我的应用程序有一个启动后台下载操作的按钮,然后根据下载的文件执行一些操作。

这就像“一旦下载必要的数据后游戏就会开始”的情况,用户可能仍然会使用主表格。

private void btnStart_Click(object sender, EventArgs e)
{
    //execute some code

    Downloader.RunWorkerAsync(files); //this worker reports progress to the main form

    while (Downloader.IsBusy)
        Application.DoEvents();

    //execute some more code
}

我知道这样做并不好。

我无法同步执行下载代码,因为主窗体需要在下载操作期间保持响应。 我也无法将最终代码放入下载完成的事件中,因为它已被程序的许多其他区域使用,并且必须保持“通用”下载系统。

那么,有没有办法做我想做的事情?我对其他异步方法没有任何经验。

2 个答案:

答案 0 :(得分:2)

如果您使用BackgrounWorker,则必须正确配置。 BW有RunWorkerCompleted事件,您必须订阅该事件才能处理完成异步工作。

答案 1 :(得分:1)

我认为你应该使用.net 4.5框架的异步编程功能(awaitasync)。

参考async programming