2

所以我有一些 C# 代码实例化一个通过 COM 对象导出的类。该特定的实例化调用是阻塞调用(需要从外部源下载数据)。因此,使我的 C# 阻塞。

是否可以异步实例化对象?

4

2 回答 2

2

这取决于。

通常,您可以启动 aTask以在后台线程上实例化对象。使用 C# 5,这可以很简单:

var yourObject = await Task.Run(() => new TheObject());

但是,由于这是一个 COM 对象,因此对象本身很可能具有线程亲和性。如果 COM 对象需要一个单线程单元线程,则需要保证它有一个 STA 线程。如果它具有线程亲和性,那么您可能需要在 UI 线程上执行此操作。

于 2013-09-04T20:54:27.287 回答
0

我通过异步使用 BeginInvoke 和 EndInovke 解决了这个问题。即使使用 COM 对象,.EndInovke 调用也能够检索数据。这从根本上改变了软件的工作方式。

于 2013-09-06T21:35:21.927 回答