如何将lambda表达式分派到后台(非UI)线程
本文关键字:UI 线程 后台 lambda 表达式 分派 | 更新日期: 2023-09-27 18:30:13
我希望执行此操作:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
... // do some UI specific stuff
});
但是,我不想将lambda表达式发送到UI线程,而是想将其发送到后台工作程序。
这种情况下,我有一个消息框,我需要知道是否要进行一些额外的处理(在这种情况下是复制文件)。
如何才能做到这一点?我对不包括lambda表达式调度的重构解决方案持开放态度。
感谢阅读
MessageBox在UI线程上运行,因此当它从模式显示返回时,您就在UI线程中。此时向UI调度器进行调度是没有意义的。
您希望在后台线程(例如,ThreadPool.QueueUserWorkItem,通过Task等)上运行lambda,然后在完成后使用调度器返回UI线程。但是您需要来自UI线程的调度器;不确定它是否与您在代码中提到的不同。
如果我正确理解你的问题,你会看到这样的东西。首先在UI线程上显示一个消息框,等待结果,如果需要,将一些工作分派到后台线程:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
//Show messagebox
var result = MessageBox.Show("Question?", "Title", MessageBoxButton.OKCancel);
//Check messagebox result
if (result == MessageBoxResult.OK)
{
ThreadPool.QueueUserWorkItem(x =>
{
//Do some work, transfer a file
});
}
});