为了账号安全,请及时绑定邮箱和手机立即绑定

等待 BackgoundWorker.DoWork() 完成

等待 BackgoundWorker.DoWork() 完成

C#
潇潇雨雨 2021-06-09 22:33:07
在我们基于 .NET Framework 的应用程序中,我们使用BackgroundWorker保存了一个巨大的文件,以保持 UI 响应。当我们关闭它时,我们不想在后台停止工作(默认行为)并截断文件。与此相比,是否存在一种更优雅的等待完成的方式?while (this.backgroundWorker1.IsBusy){    // Keep UI messages moving, so the form remains     // responsive during the asynchronous operation.    Application.DoEvents();}谢谢。编辑:基本上,我们想要实现的是看到应用程序消失并继续看到一个进程活着(在任务管理器中),直到后台工作完成。
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您可以使用 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来防止进程退出。


查看完整回答
反对 回复 2021-06-20
  • 3 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信