等待 BackgoundWorker.DoWork() 完成

在我们基于 .NET Framework 的应用程序中,我们使用BackgroundWorker保存了一个巨大的文件,以保持 UI 响应。当我们关闭它时,我们不想在后台停止工作(默认行为)并截断文件。


与此相比,是否存在一种更优雅的等待完成的方式?


while (this.backgroundWorker1.IsBusy)

{

    // Keep UI messages moving, so the form remains 

    // responsive during the asynchronous operation.

    Application.DoEvents();

}

谢谢。


编辑:基本上,我们想要实现的是看到应用程序消失并继续看到一个进程活着(在任务管理器中),直到后台工作完成。


潇潇雨雨
浏览 196回答 3
3回答

慕盖茨4494581

您可以使用 aWaitHandle来保持与工作线程的同步。private ManualResetEvent _canExit = new ManualResetEvent(true);private DoBackgroundWork(){    _canExit.Reset();    backgroundWorker1.RunWorkerAsync(_canExit);}protected override void OnClosed(EventArgs e){    base.OnClosed(e);    // This foreground thread will keep the process alive but allow UI thread to end.    new Thread(()=>    {        _canExit.WaitOne();        _canExit.Dispose();    }).Start();}private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){    ManualResetEvent mre = (ManualResetEvent )e.Argument;    // do your work.    mre.Set();}如果您有多个后台线程要等待,请管理一个WaitHanlde集合并使用它WaitHandle.WaitAll来防止进程退出。
打开App,查看更多内容
随时随地看视频慕课网APP