为什么从.NET BackgroundWorker线程调用非托管代码会影响UI?

时间:2008-11-12 07:25:41

标签: com backgroundworker unmanaged

我在.NET 2.0 BackgroundWorker线程中进行了一系列长时间的操作。当我调用位于引用程序集中的非托管代码时,UI将被冻结,直到调用完成。

这是为什么?我不应该从BackgroundWorker线程进行这些调用吗?


是的,它是一个COM组件,但我不知道如何判断它是否是STA以及影响/解决方案是什么。我对该组件进行了几次调用,但只是长时间运行的那些我注意到UI没有响应。

这些调用从服务器检索数据。

3 个答案:

答案 0 :(得分:3)

问题中有COM标记 - 您是否正在调用COM组件?它是STA组件吗?如果是这样,很可能会以某种方式组织回来在UI线程上进行工作。我很乐意承认自己在成为COM专家方面还有很长的路要走,但如果问题就不会让我感到惊讶。

如果您从明确创建的新线程进行调用会发生什么?

答案 1 :(得分:0)

是的,并且,这是否会发生在所有非托管代码或仅特定组件或API上?如果是特定的那个,那个非托管代码在做什么?

答案 2 :(得分:0)

另外,你可以简单地在BackgroundWorker中注释掉你当前的代码(你正在运行RunWorkerAsync ......)并在那里安排一个睡眠。如果你的GUI变得没有响应,那么某些东西是不正确的,否则它就是你正在调用的代码,因为Jon指出的可能是COM的情况。