亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

等待 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 關注
  • 239 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號