Объектная модель Outlook использует однопотоковую модель квартиры и не предоставляет никаких контекстов синхронизации "из коробки". Более того, класс SynchronizationContext
принадлежит BCL из .net framework, а не Outlook.
Интересно, возможно ли создать новый глобальный контекст синхронизации и использовать его для всех команд await в приложении-надстройке?
Да, если у потока нет собственного экземпляра SynchronizationContext
, связанного с ним. Работающий поток можно связать с контекстом синхронизации, вызвав статический метод SynchronizationContext.SetSynchronizationContext . Позже вы можете получить текущий контекст запущенного потока, используя свойство SynchronizationContext.Current
.
Если да, как я могу это сделать? Должен ли я установить его как свойство контекста выполнения перед вызовом ожидания?
Вы можете сделать это один раз, если с текущим потоком (основным) не связан контекст синхронизации. Обычно Windows Forms устанавливает экземпляр WindowsFormsSynchronizationContext
в потоке, в котором создается первая форма. (Этот поток обычно называют «потоком пользовательского интерфейса».) Этот контекст синхронизации вызывает делегаты, переданные ему именно в этот поток.