从任务调用Messagebox.Show

时间:2012-10-08 10:22:38

标签: c# task-parallel-library

我刚刚在代码库中找到了这个宝石。我想我已经知道了这个问题的答案:我很确定在后台线程中调用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;
    }
}

1 个答案:

答案 0 :(得分:1)

这样做似乎没有什么意义,事实上潜在的危险 - 考虑到繁重的工作实际上是在使用任务的非UI阻塞线程上处理(应该是这种情况)然后是时间你希望表单阻止输入(取决于要求,但无论对话框模式如何,这仍然有效),直到确认是在STAThread上执行此操作。