【问题标题】:InvalidOperationException in a new WPF window when I interact with a control当我与控件交互时,新 WPF 窗口中出现 InvalidOperationException
【发布时间】:2017-02-20 07:03:29
【问题描述】:

我有一个添加自定义工具栏到 UI 的 word 插件。该工具栏上有一个按钮,点击后会打开一个 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)

只有当我与窗口中的控件交互时才会发生这种情况。它与任何特定控件无关,我已经删除了所有内容,只是在窗口中间创建并清空了文本框。不过,只要我点击它,应用就会崩溃。

现在我知道这个异常基本上告诉我,我可能正在执行一个在可视化树修改过程中修改可视化树的操作(例如在可见性更改时显示消息框)。但我不会做那样的事情。我只是打开一个窗口,然后点击里面的一个控件。

有人对原因有什么想法吗?

【问题讨论】:

  • 是的,我已经尝试通过 Dispatcher 打开窗口,但没有成功。问题是窗口打开时不会抛出异常,当您尝试与窗口中的任何内容进行交互时会抛出异常。
  • 你能给我们一个最小的样本来重现这个问题吗?顺便说一句,我怀疑这与 ms-word 有关,因此删除该标签可能会在这里为您提供更多的受众...
  • 遗憾的是,我无法在我的主应用程序环境之外复制它。如果您将其解耦,则代码实际上并没有什么特别之处。它只是一个启动对话的按钮。

标签: c# .net wpf winforms


【解决方案1】:

对于任何感兴趣的人,我最终设法解决了这个问题。原来wpf对话实际上是一个带有elementhost的WindowsForms表单。在 ElementHost 的 VisibleChanged 事件上执行的父 WinForms 表单中有一些代码:

this.TopMost = true;
Application.DoEvents();
this.TopMost = false;

这是为了确保对话在首次显示时始终显示在顶部。这段代码一删除,异常就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多