2016-10-06 3 views
0

Я знаю, что есть много вопросов о «вызывающей нити ...», но так, как я и пытался, не решал мою проблему, и я знаю, что мне нужно включить вызов потока, но я не знаю, где.Открыть новое окно «Вызывающая нить должна быть STA»

Итак, я создаю mailItem и добавляю обработчик отправки и закрытия, как показано ниже, если почтовый элемент закрыт. Я ничего не делаю, если отправляется почтовый элемент. Мне нужно открыть окно пользователю для регистрации своего рода история.

Ошибка возникает, когда я пытаюсь создать окно для регистрации истории.

Шаг 1:

((Microsoft.Office.Interop.Outlook.ItemEvents_10_Event)mailItem).Send += new Microsoft.Office.Interop.Outlook.ItemEvents_10_SendEventHandler(EmailEnviado); 

((Microsoft.Office.Interop.Outlook.ItemEvents_10_Event)mailItem).Close += new Microsoft.Office.Interop.Outlook.ItemEvents_10_CloseEventHandler(EmailCancelado); 

Шаг 2

mailItem.Display(); 

Шаг 3

private void EmailEnviado(ref bool 
{ 
      List<int> listaPendenciaId = new List<int>(); 

      foreach (Pendencia pendencia in this.listaPendencia) 
      { 
       if (pendencia.IsSelecionado) 
       { 
        listaPendenciaId.Add(pendencia. 
      System.Windows.Window historicoEmailCadastro = new System.Windows.Window 
        { 
         Title = "Cadastro de Histórico de Email", 
         Content = new HistoricoEmailCadastro(listaPendenciaId), 
         Width = 249, 
         Height = 213, 
         ResizeMode = ResizeMode.NoResize 
        }; 

      historicoEmailCadastro.ShowDialog(); 
} 

Заранее спасибо.

+0

Microsoft Office API, являются COM на основе и COM-объекты должны быть доступны в том же потоке, что они были созданы. –

+0

Хм, что-то не так с тем, как вы инициализируете объект приложения Outlook. Как создание его на рабочем потоке. Мы не можем видеть этот код, но вы должны его исправить. –

ответ

2

Вы должны вызывать все элементы пользовательского интерфейса только из нити пользовательского интерфейса.

Application.Current.Dispatcher.Invoke(() => 
{  
    ///.... 
     System.Windows.Window historicoEmailCadastro = new System.Windows.Window 
     { 
      Title = "Cadastro de Histórico de Email", 
      Content = new HistoricoEmailCadastro(listaPendenciaId), 
      Width = 249, 
      Height = 213, 
      ResizeMode = ResizeMode.NoResize 
     }; 

    historicoEmailCadastro.ShowDialog(); 
}); 

Подробнее here

+0

Большое спасибо tym! – User

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