2
我刚刚在我们的代码库中找到了一个表单中的这个gem。我想我已经知道了这个答案:我很确定在后台线程中调用MessageBox.Show是一个可怕的想法,但是有人可以为我确认并澄清吗?调用MessageBox.Show从任务
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (_FileScanner.IsSending)
{
Trace("Cannot close form because: Transferring files.");
e.Cancel = true;
Task<DialogResult> t = Task.Factory.StartNew(() => MessageBox.Show("Transferring files"));
return;
}
}
是的,据我所知你应该只从UI线程调用UI,否则你可以从异常中获得任何意想不到的结果:)我不知道这段代码片段背后的原因是什么......;) –
我是不完全确定,但是TaskScheduler实际上可以调度任务以使用UI同步上下文,并且代码可以在UI线程上执行。 – jags