打开新窗口“调用线程必须是STA”

时间:2016-10-06 13:59:32

标签: c# wpf multithreading outlook

我知道有很多关于“调用线程......”的问题,但我尝试的方法没有解决我的问题,我知道我必须包含一个线程调用但我不知道在哪里

所以,我创建了一个mailItem,并添加了send和close事件处理程序,如果邮件项已关闭,我什么都不做,如果发送邮件项,我必须打开一个窗口给用户注册一种历史记录

当我尝试创建注册历史记录的窗口时发生错误。

第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();
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

您应该只从UI线程调用所有UI内容。

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