Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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放在任何项目的任何用户控件中的任何位置时出现InvalidOperationException_C#_Wpf_Exception_Visual Studio 2012 - Fatal编程技术网

C# 将Messagebox放在任何项目的任何用户控件中的任何位置时出现InvalidOperationException

C# 将Messagebox放在任何项目的任何用户控件中的任何位置时出现InvalidOperationException,c#,wpf,exception,visual-studio-2012,C#,Wpf,Exception,Visual Studio 2012,我开始在VS2012 Ultimate中看到一个InvalidOperationException,它说: “调度程序处理已暂停,但仍在处理消息。” …每当我调用MessagBox时,UserControl的代码隐藏中的任何位置。目前,这似乎影响了我计算机上的每个项目,包括我下载的项目和一个除了UserControl本身之外没有实际代码的新项目。然而,这似乎只会影响UserControls;标准类和落后的Windows代码可以正常工作 发生System.InvalidOperationExce

我开始在VS2012 Ultimate中看到一个
InvalidOperationException
,它说:

“调度程序处理已暂停,但仍在处理消息。”

…每当我调用
MessagBox
时,
UserControl
的代码隐藏中的任何位置。目前,这似乎影响了我计算机上的每个项目,包括我下载的项目和一个除了UserControl本身之外没有实际代码的新项目。然而,这似乎只会影响
UserControl
s;标准类和落后的Windows代码可以正常工作


发生System.InvalidOperationException异常

HResult=-2146233079

Message=已暂停调度程序处理,但仍在处理消息

Source=WindowsBase

堆栈跟踪: 位于System.Windows.Threading.Dispatcher.WndProcHook(IntPtr-hwnd、Int32-msg、IntPtr-wParam、IntPtr-lParam、Boolean和handled)

内部异常:


InnerException为空,因为根据VS,它为空。这个问题对任何人都有意义吗?在谷歌搜索之后,我发现了一些抛出此异常的实例,但这些情况都不是这样的。我希望有人在这里可能有一些知识,什么可能导致这一点,并可能能够帮助我之前,我求助于重新安装VS和希望最好的

任何关于如何解决这一问题的想法都将不胜感激


按照Mark Hall的要求:如此简单的类将导致异常:

public partial class TestView : UserControl
{
    public TestView()
    {
        InitializeComponent();

        System.Windows.MessageBox.Show("Test");
    }
}

Hans Passant是对的,您确实不应该在构造函数期间尝试显示消息框。构造函数不仅在运行时被调用,而且在设计时也被调用


如果您将此用于调试目的,请尝试写入日志文件或Console.WriteLine(…)。

请显示用于实例化MessageBox的代码我已更新了问题。似乎您可以在UI线程上显示MessageBox以避免异常这是一个非常丑陋的WPF问题,dispatcher循环允许递归,在WPF管道中有很多地方它不能容忍递归。因此,它任意设置了一个标志“不要递归,因为如果你这样做,地狱将冻结”。无论如何递归的一个好方法是使用MessageBox.Show(),这是一个必须递归才能保持MessageBox窗口活动的方法。唯一的治疗方法就是不要在不合适的地方打电话。绝对不是在控件的构造函数中。MessageBox不能替代调试器断点。@HansPassant“唯一的解决方法是不要在不合适的地方调用它。”-有没有办法知道我是否在这些“不合适的地方”?