2013-01-19 191 views
2

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

这就像“一旦必要的数据下载后游戏即将开始”的情况,用户仍然可以使用主窗体。

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

如果您使用BackgrounWorker您必须正确配置它。 BW有RunWorkerCompleted事件,您必须为其处理完成异步工作。

1

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

async programming

+0

如果我使用.NET 4.5的功能,并尝试运行使用早期.NET版本在PC上的应用程序,它不工作?该程序的大多数用户都在3.0 - 4.0 – Ryan