我刚刚在代码库中找到了这个宝石。我想我已经知道了这个问题的答案:我很确定在后台线程中调用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;
}
}
答案 0 :(得分:1)
这样做似乎没有什么意义,事实上潜在的危险 - 考虑到繁重的工作实际上是在使用任务的非UI阻塞线程上处理(应该是这种情况)然后是时间你希望表单阻止输入(取决于要求,但无论对话框模式如何,这仍然有效),直到确认是在STAThread上执行此操作。