C#等待异步操作完成

C#等待异步操作完成,c#,multithreading,asynchronous,worker,C#,Multithreading,Asynchronous,Worker,我想知道对于我正在尝试做的事情,最好的方法可能是什么。我的应用程序有一个按钮,启动后台下载操作,然后根据下载的文件执行一些操作 这就像“一旦下载了必要的数据,游戏很快就会开始”的情况,用户仍然可以使用主窗体 private void btnStart_Click(object sender, EventArgs e) { //execute some code Downloader.RunWorkerAsync(files); //this worker reports pro

我想知道对于我正在尝试做的事情,最好的方法可能是什么。我的应用程序有一个按钮,启动后台下载操作,然后根据下载的文件执行一些操作

这就像“一旦下载了必要的数据,游戏很快就会开始”的情况,用户仍然可以使用主窗体

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
}
我知道那样做一点好处都没有

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


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

如果您使用
BackgroundWorker
,则必须正确配置它。BW具有
RunWorkerCompleted
事件,您必须订阅该事件以处理异步工作的完成。

我认为您应该使用.net 4.5 framework的异步编程功能(
await
async


请参阅

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