使用.NET4任务库在WPF中显示阻止消息框
本文关键字:显示 消息 WPF NET4 任务 使用 | 更新日期: 2023-09-27 18:20:54
我的WPF应用程序中有以下代码:
Task task = Task.Factory.StartNew(() => {
DoInitialProcess();
});
task.ContinueWith(t =>
Dispatcher.BeginInvoke((Action)(() => {
MessageBox.Show("Error: " + t.Exception.InnerExceptions[0].Message);
})), TaskContinuationOptions.OnlyOnFaulted);
它成功地触发了延续,并在发生异常时显示消息框,但它不会阻止主UI线程上的输入。
为什么它不阻塞主UI线程,最好的方法是什么?
通常情况下,这通常是通过适当的TaskScheduler
而不是通过Dispatcher.BeginInvoke
来实现的。尝试以下操作:
task.ContinueWith(t =>
{
MessageBox.Show("Error: " + t.Exception.InnerExceptions[0].Message);
},
CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext());
如果您在UI线程中创建此任务,那么上面的操作应该符合您的预期。
但是,如果您是在后台线程上启动此任务,则需要提供一种干净的方法来将正确的TaskScheduler
添加到延续中。这可以通过在窗口构建过程中获取调度程序或其他方式来完成,然后在以后使用它。