我们有一个嵌入在 WinForms 控件中的 WPF 控件,该控件又作为 ActiveX 控件公开。这个 ActiveX 最终被用于第三方开发的 C++ 应用程序中。
在某些时候,ActiveX 控件的 UI 被冻结,而 C++ 应用程序的其余部分运行良好。经过一些调试,我注意到 WPF 控件在每次调用 Application.Current.Dispatcher.Invoke 时都会被阻止。但是,WinForms 控件可以很好地处理它的 Control.Invoke 调用。每当我暂停调试器时,我可以看到 UI 线程正在 C++ 应用程序中做一些工作,但似乎没有被阻塞或等待任何东西。就好像 UI 线程突然莫名其妙地拒绝执行 WPF 委托。
当 C++ 应用程序长时间(几分钟)独占 UI 线程时,WPF 控件有时会进入此状态。我要做的第一件事是为这样一个耗时的任务使用不同的线程,但正如我已经说过的,我不对 C++ 应用程序正在做什么负责。无论如何,这不是我的 WPF 控件以这种方式运行的理由。我不知道如何解决这个问题;任何帮助,将不胜感激。