3

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

1 回答 1

2

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

于 2012-10-08T10:31:40.957 回答