gpt4 book ai didi

c# - 在WPF UI线程中等待Dispatcher.Invoke

转载 作者:行者123 更新时间:2023-12-03 13:04:34 25 4
gpt4 key购买 nike

我有一个BackgroundWorker,有时需要调用UI线程来执行一些工作并检索结果。为此,我在后台线程中使用了以下内容:

App.Current.Dispatcher.Invoke(new Action(() => { /* some code that updates local data */ });

当应用程序退出时,我希望能够告诉 BackgroundWorker退出,但我希望允许它完成所有当前操作。换句话说,我想调用 BackgroundWorkerObj.CancelAsync(),然后泵送消息,直到线程退出。

我尝试了以下操作,但是后台线程中的 Invoke()仍然受阻(尽管UI线程仍在搅动):
Worker.CancelAsync();
while (Worker.IsBusy)
{
DispatcherFrame Frame = new DispatcherFrame();
Frame.Continue = false;
Dispatcher.PushFrame(Frame);
}

正确的方法是什么? UI线程如何在仍从该 BackgroundWorker对象执行调用的同时等待 BackgroundWorker

最佳答案

这种关闭死锁正是为什么您不应该为此目的使用Invoke的原因。

将其更改为BeginInvoke(),并使用事件将其传回工作线程。

关于c# - 在WPF UI线程中等待Dispatcher.Invoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32595548/

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