我希望执行此操作:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
... // do some UI specific stuff
});
但是我没有将lambda表达式发送到UI线程,而是将其发送给后台工作者。
情况是这样的,我有一个消息框,其响应我需要知道是否要进行一些额外的处理(在这种情况下复制文件)。
如何实现这一目标?我愿意接受一种不包含lambda表达式调度的重构解决方案。
感谢您阅读
答案 0 :(得分:0)
如果我理解你的问题,你会看到这样的事情。首先在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
});
}
});
答案 1 :(得分:0)
MessageBox在UI线程上运行,因此当它从其模态显示返回时,您就在UI线程上。此时调度到UI调度程序没有意义。
您希望在后台线程(例如,ThreadPool.QueueUserWorkItem,通过任务等)上运行lambda,然后在完成后使用调度程序返回UI线程。但是你需要来自UI线程的调度程序;不确定它是否与您在代码中提到的那个不同。