MessageBox.Show和延迟/延迟更新

时间:2012-06-13 17:52:29

标签: c# delegates deferred-execution

对不起,我不知道如何标题这个问题。

我已经为这个错误写了大约10次的解释,然后将其删除,因为它不清楚 - 原谅我,我直接跳到代码然后会解释

public MainWindow()
    {
        InitializeComponent();
        stuff();
    }

    private void stuff()
    {
            DispatcherOperation disOp = Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(delegate
                {
                    //PrintDialog dialog = new PrintDialog();
                    //dialog.PrintVisual(canvas1, "");
                }));

            string x = disOp.Status.ToString();
            MessageBox.Show(disOp.Status.ToString());
    }

我已经介绍了这段代码(Visual Studio中的F11)以及它何时到达该行   disOp.Status.ToString()下一个F11按预期跳转到下一行。

然而,当我到达MessageBox.Show(disOp.Status.ToString());行并按F11时,它会跳转到我的DispatcherOperation委托。

我的问题是为什么当我使用Messagebox控件而不是字符串时会发生这种情况!?

(这实际上是我需要的EXACT行为,但我不希望出现消息框,因为用户必须单击OK / Cancel ...我还能如何复制它?)

谢谢

戴夫

1 个答案:

答案 0 :(得分:1)

BeginInvoke不会实际运行您的操作,直到当前线程可以自由处理挂起的消息,并且MessageBox必须被泵送以允许消息被处理(类似于DoEvents)。