对不起,我不知道如何标题这个问题。
我已经为这个错误写了大约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 ...我还能如何复制它?)
谢谢
戴夫
答案 0 :(得分:1)
BeginInvoke不会实际运行您的操作,直到当前线程可以自由处理挂起的消息,并且MessageBox必须被泵送以允许消息被处理(类似于DoEvents)。