gpt4 book ai didi

wpf - WPF Dispatcher.BeginInvoke和UI/背景线程

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

我想我需要对WPF Dispatcher.Invoke和Dispatcher.BeginInvoke用法进行一些说明。

假设我有一些长时间运行的“工作”代码,例如在简单的WPF应用程序中按下按钮即可调用的代码:

longWorkTextBox.Text = "Ready For Work!";
Action workAction = delegate
{
Console.WriteLine("Starting Work Action");
int i = int.MaxValue;
while (i > 0)
i--;
Console.WriteLine("Ending Work Action");
longWorkTextBox.Text = "Work Complete";
};
longWorkTextBox.Dispatcher.BeginInvoke(DispatcherPriority.Background, workAction);

这段代码在执行workAction时锁定了我的用户界面。这是因为Dispatcher调用始终在UI线程上运行,对吗?

假设这样做, 是什么,将调度程序配置为在与UI分开的线程中执行workAction的最佳实践是什么? 我知道我可以在我的workAction中添加BackgroundWorker来防止UI锁定为:
longWorkTextBox.Text = "Ready For Work!";
Action workAction = delegate
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += delegate
{
Console.WriteLine("Starting Slow Work");
int i = int.MaxValue;
while (i > 0)
i--;
Console.WriteLine("Ending Work Action");
};
worker.RunWorkerCompleted += delegate
{
longWorkTextBox.Text = "Work Complete";
};
worker.RunWorkerAsync();
};
longWorkTextBox.Dispatcher.BeginInvoke(DispatcherPriority.Background, workAction);

除了使用BackgroundWorker,还有其他更优雅的方法吗?我一直听说BackgroundWorker很古怪,所以我很想知道一些替代方法。

最佳答案

老实说,我认为 BackgroundWorker 是最优雅的解决方案。我想不出一种更简单的方法来做到这一点。

关于wpf - WPF Dispatcher.BeginInvoke和UI/背景线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1207832/

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