gpt4 book ai didi

c# - 等待 BackgoundWorker.DoWork() 完成

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:14 25 4
gpt4 key购买 nike

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

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

while (this.backgroundWorker1.IsBusy)
{
// Keep UI messages moving, so the form remains
// responsive during the asynchronous operation.
Application.DoEvents();
}

谢谢。

编辑:基本上,我们正在努力实现的是看到应用程序消失并继续看到一个进程事件(在 Task Manager 中)直到后台工作完成。

最佳答案

您可以使用 WaitHandle 来保持与工作线程的同步。

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 来防止进程退出。

关于c# - 等待 BackgoundWorker.DoWork() 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50406437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com