0

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

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


是的,它是一个 COM 组件,但我不确定如何判断它是否是 STA,以及它的含义/解决方案是什么。我对该组件进行了多次调用,但只有在长时间运行的情况下,我才注意到 UI 变得无响应。

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

4

3 回答 3

3

您在问题中有 COM 标记 - 您是在调用 COM 组件吗?它是 STA 组件吗?如果是这样,它很可能会以某种方式编组回去在 UI 线程上完成其工作。我会欣然承认,我离成为 COM 方面的专家还有很长的路要走,但如果这是问题所在,我不会感到惊讶。

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

于 2008-11-12T07:52:05.727 回答
0

是的,而且,所有非托管代码或仅特定组件或 API 都会发生这种情况吗?如果是特定的,那非托管代码在做什么?

于 2008-11-12T07:33:36.403 回答
0

此外,您可以简单地在 BackgroundWorker 中注释掉您当前的代码(您正在运行 RunWorkerAsync 正确...)并在那里休眠。如果您的 GUI 变得无响应,则某些事情是不对的,否则就是您调用的代码,正如 Jon 指出的那样,COM 可能就是这种情况。

于 2008-11-12T08:00:43.840 回答