c# – WinForms中的WPF:虽然UI线程处于活动状态,但在Dispatcher.Invoke上被阻止

c# – WinForms中的WPF:虽然UI线程处于活动状态,但在Dispatcher.Invoke上被阻止,第1张

概述我们在WinForms控件中嵌入了一个 WPF控件,该控件又作为ActiveX控件公开.此ActiveX最终用于由第三方开发的C应用程序. 在某些时候,ActiveX控件的UI变得冻结,而C应用程序的其余部分运行正常.经过一些调试后,我注意到每次调用Application.Current.Dispatcher.Invoke时都阻止了WPF控件.但是,WinForms控件处理它的Control.In @H_403_0@ @H_403_0@ 我们在WinForms控件中嵌入了一个 WPF控件,该控件又作为ActiveX控件公开.此ActiveX最终用于由第三方开发的C应用程序.

在某些时候,ActiveX控件的UI变得冻结,而C应用程序的其余部分运行正常.经过一些调试后,我注意到每次调用Application.Current.dispatcher.Invoke时都阻止了WPF控件.但是,WinForms控件处理它的Control.Invoke调用就好了.每当我暂停调试器时,我都可以看到UI线程在C应用程序中做了一些工作,但似乎没有阻塞或等待任何事情.这就好像UI线程突然并且莫名其妙地拒绝执行WPF委托.

当C应用程序在很长一段时间(几分钟)内独占UI线程时,WPF控件有时会进入此状态.我要做的第一件事就是使用不同的线程进行这样一个耗时的任务,但正如我已经说过的,我不负责C应用程序正在做什么.无论如何,这不是我的WPF控件以这种方式运行的原因.我不知道如何解决这个问题;任何帮助,将不胜感激.

解决方法 我建议运行MS DeBUG Diagnostics Tool – http://support.microsoft.com/kb/2580960.

我们已经有了很好的结果来识别COM互 *** 作阻塞问题,在我们的例子中,这是一个挂起的COM终结器阻塞垃圾收集.您可以在各种模式下运行它,但是当使用.NET分析运行时,它将突出显示终结器队列等的任何问题.运行起来有点笨拙,但它给你的信息是黄金.

@H_403_0@ 总结

以上是内存溢出为你收集整理的c# – WinForms中的WPF:虽然UI线程处于活动状态,但在Dispatcher.Invoke上被阻止全部内容,希望文章能够帮你解决c# – WinForms中的WPF:虽然UI线程处于活动状态,但在Dispatcher.Invoke上被阻止所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存