我有一个词外接,添加自定义工具栏到用户界面。该工具栏上有一个按钮,单击该按钮将打开一个WPF窗口。
我最近在那个窗户周围有一些奇怪的行为。当我试图与其上的任何控件交互时,窗口就会打开(即,单击textbox开始键入,选中复选框等)。我得到了无数的InvalidOperationException:
************** Exception Text **************
System.InvalidOperationException: Dispatcher processing has been suspended, but messages are still being processed.
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)只有当我与窗口中的控件交互时,才会发生这种情况。它与任何特定的控件无关,我已经删除了所有内容,只是在窗口中间创建并空了textbox。不过,只要我一点击它,应用程序就会崩溃。
现在,我知道这个异常基本上告诉我,我可能正在执行一个操作,在可视化树修改过程中修改可视树(比如在可见性更改上显示消息框)。但我不会做那样的事。我只是打开一个窗口,然后点击里面的一个控件。
有人对这件事有什么想法吗?
发布于 2016-11-03 14:36:13
对任何感兴趣的人来说,我最终都成功地解决了这个问题。事实证明,wpf对话实际上是一个WindowsForms表单,其中包含了elementhost。父WinForms表单中有一些代码是在ElementHost的VisibleChanged事件上执行的:
this.TopMost = true;
Application.DoEvents();
this.TopMost = false;这是为了确保对话在第一次显示时总是显示在顶部。一旦这段代码被删除,异常就消失了。
https://stackoverflow.com/questions/39982314
复制相似问题