Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Com 为什么从.NET BackgroundWorker线程调用非托管代码会影响UI?_Com_Backgroundworker_Unmanaged - Fatal编程技术网

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

Com 为什么从.NET BackgroundWorker线程调用非托管代码会影响UI?,com,backgroundworker,unmanaged,Com,Backgroundworker,Unmanaged,在.NET2.0BackgroundWorker线程中,我有一系列长期运行的操作。当我调用位于引用程序集中的非托管代码时,UI将被冻结,直到调用完成 为什么会这样?我是否应该从BackgroundWorker线程进行这些调用 是的,它是一个COM组件,但我不确定如何判断它是否是STA,以及它的含义/解决方案是什么。我多次调用该组件,但只有在长时间运行的组件中,我才注意到UI变得没有响应 这些调用从服务器检索数据。是的,而且,这种情况是发生在所有非托管代码中,还是只发生在特定组件或API中?如果

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

为什么会这样?我是否应该从
BackgroundWorker
线程进行这些调用


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


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

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

是的,而且,这是发生在所有非托管代码中,还是只发生在特定组件或API中?如果是一个特定的组件,那么非托管代码在做什么?

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


如果从显式创建的新线程调用,会发生什么情况?

问题中有COM标记-是否调用COM组件?它是STA组件吗?如果是这样的话,它很可能会以某种方式重新编组以在UI线程上执行其工作。我很乐意承认,我离成为COM方面的专家还有很长的路要走,但如果这就是问题所在,我也不会感到惊讶


如果从显式创建的新线程调用,会发生什么情况?

此外,您可以简单地在BackgroundWorker中注释掉当前代码(您正在运行RunWorkerAsync…),然后在其中进行休眠。如果您的GUI没有响应,则可能出现一些错误,否则,正如Jon指出的,您正在调用的代码可能是COM的情况。

此外,您可以在BackgroundWorker中注释掉当前代码(您正在运行RunWorkerAsync…),并在其中休眠。如果您的GUI变得无响应,则可能是不正确的,否则,正如Jon指出的,您正在调用的代码可能是COM的情况