对不起,我不知道如何标题这个问题。MessageBox.Show和延期/延迟更新
我写了一个解释这个错误约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控件而不是字符串时发生这种情况!?
(这实际上是确切的行为我需要,但我不想一个消息框出现,因为用户必须点击确定/取消......还能如何我复制这个?)
谢谢你
戴夫
你说得对。你没有解释得很好。 :-)如果你不想要一个消息框出现,就不要调用MessageBox.Show()。至于为什么它们的行为不同:编译器可能会优化'string x'赋值语句,因为它在未被使用的情况下超出了范围。 'MessageBox.Show()'不会,因为它实际上做了一些事情。 –