所以我有一些C#代码实例化一个通过COM对象导出的类。该特定实例化调用是阻塞调用(需要从外部源下载数据)。因此,使我的C#阻塞。
是否可以异步实例化对象?
答案 0 :(得分:2)
取决于。
通常,您可以启动Task
以在后台线程上实例化对象。使用C#5,这可以很简单:
var yourObject = await Task.Run(() => new TheObject());
但是,由于这是一个COM对象,因此对象本身很可能具有线程关联性。如果COM对象需要单线程单元线程,则需要为其保证STA线程。如果它具有线程亲和性,那么您可能需要在UI线程上执行此操作。
答案 1 :(得分:0)
我通过使用BeginInvoke和EndInovke异步解决了这个问题。即使使用COM对象,.EndInovke调用也能够检索数据。这从根本上改变了软件的工作方式。