[英]InvalidOperationException in a new WPF window when I interact with a control
我有一个单词插件,可以将自定义工具栏添加到 UI。 该工具栏上有一个按钮,单击可打开 WPF 窗口。
我最近在那个窗口周围出现了一些奇怪的行为。 当我尝试与其上的任何控件进行交互时窗口打开时(即单击文本框开始输入,检查复选框等)。 我收到许多 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)
只有当我与窗口中的控件交互时才会发生这种情况。 它与任何特定控件无关,我已经删除了所有内容,只是在窗口中间创建了一个空文本框。 尽管如此,只要我点击它,应用程序就会崩溃。
现在我知道这个异常基本上告诉我,我可能正在执行一个操作,在可视化树修改中间修改可视化树(比如在可见性改变时显示消息框)。 但我不会做那样的事情。 我只是打开一个窗口,然后单击里面的控件。
有人对原因有任何想法吗?
对于任何感兴趣的人,我最终设法解决了这个问题。 原来,wpf 对话实际上是一个带有 elementhost 的 WindowsForms 表单。 父 WinForms 窗体中有一些代码在 ElementHost 的 VisibleChanged 事件上执行:
this.TopMost = true;
Application.DoEvents();
this.TopMost = false;
这是为了确保对话在首次显示时始终显示在顶部。 这段代码一删除,异常就消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.