Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MessageBox.Show和延迟/延迟更新_C#_Delegates_Deferred Execution - Fatal编程技术网

C# MessageBox.Show和延迟/延迟更新

C# MessageBox.Show和延迟/延迟更新,c#,delegates,deferred-execution,C#,Delegates,Deferred Execution,对不起,我不知道这个问题的标题 我已经为这个错误写了大约10次解释,然后删除了它,因为它不清楚-原谅我,我直接进入代码,然后会解释 public MainWindow() { InitializeComponent(); stuff(); } private void stuff() { DispatcherOperation disOp = Dispatcher.BeginInvoke(Dispatche

对不起,我不知道这个问题的标题

我已经为这个错误写了大约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());
    }
我已经详细介绍了这段代码(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()
没有,因为它确实做了一些事情。你不知道这到底有多大帮助。真的,非常感谢。