2013-09-04 2 views
2

Так что у меня есть код C#, создающий экземпляр класса, который экспортируется через COM-объект. Этот конкретный экземплярный вызов является блокирующим вызовом (требуется загрузка данных из внешнего источника). Поэтому, делая мой C# блокировки.Активация классов активации асинхронно

Возможно ли инстанцировать объект асинхронно?

+3

Несомненно. Спрячьте его в другой поток с обратным вызовом или используйте 'async'' await'. –

+0

@RobertHarvey Это может не сработать, так как это COM-объект ... Трудно узнать без дополнительной информации. –

ответ

0

Я решил это с помощью BeginInvoke и EndInovke асинхронно. Даже с COM-объектом вызов .EndInovke способен извлекать данные. Это меняет способ работы программного обеспечения.

2

Это зависит.

В общем, вы можете запустить Task, чтобы создать объект на фоновом потоке. С # 5, это может быть столь же просто, как:

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

Однако, так как это COM-объект, это очень возможно, что сам объект может иметь сродство нити. Если для COM-объекта требуется однопоточная резьба, вам необходимо гарантировать для него поток STA. Если у него есть сходство нитей, вам может понадобиться сделать это в потоке пользовательского интерфейса.

Смежные вопросы