C# MessageBox.Show和延迟/延迟更新
对不起,我不知道这个问题的标题 我已经为这个错误写了大约10次解释,然后删除了它,因为它不清楚-原谅我,我直接进入代码,然后会解释C# MessageBox.Show和延迟/延迟更新,c#,delegates,deferred-execution,C#,Delegates,Deferred Execution,对不起,我不知道这个问题的标题 我已经为这个错误写了大约10次解释,然后删除了它,因为它不清楚-原谅我,我直接进入代码,然后会解释 public MainWindow() { InitializeComponent(); stuff(); } private void stuff() { DispatcherOperation disOp = Dispatcher.BeginInvoke(Dispatche
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());
}
我已经详细介绍了这段代码(VisualStudio中的F11)以及它何时到达终点
disOp.Status.ToString()
下一个F11按预期跳转到下一行
但是,当我到达行MessageBox.Show(disOp.Status.ToString())时
并按F11,它跳转到我的DispatcherOperation委托
我的问题是,当我使用Messagebox控件而不是字符串时,为什么会发生这种情况
(这实际上正是我所需要的行为,但我不希望出现messagebox,因为用户必须单击OK/Cancel…否则我如何复制它?)
多谢各位
Dave在当前线程可以自由处理挂起的MSG之前,BeginInvoke无法实际运行您的操作,MessageBox必须能够让消息得到处理(有点像DoEvents)。您是对的。你解释得不好。:-)如果不希望messagebox出现,只需不要调用
messagebox.Show()
。至于它们行为不同的原因:编译器可能会优化string x
赋值语句,因为它不在使用范围内MessageBox.Show()
没有,因为它确实做了一些事情。你不知道这到底有多大帮助。真的,非常感谢。