我几天来一直在这个问题上,没有找到解决方案...

我在VB.NET中为SolidWorks开发了一个宏。它使用我用C++开发的DLL中的COM对象。该COM对象的功能需要很长时间才能运行(有时会超过30秒),并且还会使用OpenMP使用并行化的循环。

我的问题是,当我运行这些功能之一时,大约10秒钟后,程序停止响应,并冻结了UI! DLL函数正在运行,我们无法使用DoEvents()将更新发送到UI ...

我试图将函数放在后台工作程序中,但是对于COM对象却无法正常工作。我尝试的另一件事是让后台工作人员每隔一定时间访问我的进程,以查看其是否响应。但是当它停止响应时,我不能强制它回答。我发现的唯一解决方案是更改注册表项HungAppTimeout的值,但这适用于计算机上的所有内容,而我希望它仅适用于我的代码。

您是否有解决方案来避免“无答案”?

代码示例:

Public Sub StartfunctionCOM()

   Dim Myclass as COMClass = new COMClass
   Myclass.functiontakemanytime() 'time >10sec

End Sub

最佳答案

我找到了一个解决方案:我在我的C++代码中调用了DisableProcessWindowsGhosting函数。它不会阻止应用程序“不响应”,但是会删除Windows的自动响应(即标准的“应用程序不再响应,等待还是杀死?”消息框)。

关于c++ - 从COM对象执行功能期间“Not responding”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58446576/

10-11 23:06
查看更多