2017-05-24 110 views
1

我需要打开多个Outlook窗口,以前填充了ticulo和电子邮件正文以供以后用户通知发件人。我需要打开几个窗口(我走一个网格来知道有多少个窗口)。 我试图用线程做到这一点,但会出现一条错误消息:Outlook无法执行此操作,因为对话框已打开。请关闭它,然后再试一次“ 如何打开多个窗口的竞争?打开多个Outlook窗口使用C#发送电子邮件

测试呼叫

private void button2_Click(object sender, EventArgs e) 
{ 
    int qtdEventos = dgvDescEvento.RowCount; 
    Thread[] Threads = new Thread[qtdEventos]; 
    try 
    { 
     cEmail testeEmail = new cEmail(); 
     for (int i = 0; i < qtdEventos; i++) 
     { 
      Threads[i] = new Thread(new ThreadStart(new cEmail().Monta)); 
     } 
     foreach (Thread t in Threads) 
     { 
      t.Start(); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Outlook = Microsoft.Office.Interop.Outlook; 

namespace NavEventos.Class 
{ 
    class cEmail 
    { 
     private Outlook.Application outlookApp; 
     public cEmail() 
     { 
      outlookApp = new Outlook.Application(); 
     } 

     public void Monta() 
     { 
      string pTitulo = "Title"; 
      string pAssunto = "Body test"; 
      Outlook._MailItem oMailItem = (Outlook._MailItem)outlookApp.CreateItem(Outlook.OlItemType.olMailItem); 
      Outlook.Inspector oInspector = oMailItem.GetInspector; 

      Outlook.Recipients oRecips = (Outlook.Recipients)oMailItem.Recipients; 

      #region MONTA ASSUNTO 
      oMailItem.Subject = pTitulo; 
      #endregion 

      #region MONTA CORPO DO E-MAIL 
      oMailItem.Body = pAssunto; 
      #endregion 

      oMailItem.Display(true); 
     } 
    } 
} 
+0

我解决了这个问题,通过在方法中使用“Lock”并正常调用线程。这一次只能打开一个窗口。 –

回答

0

你可以不喜欢这个...但你不应该尝试;(

正如你所看到的Outlook COM接口ace正在努力阻止你这样做,这是展示邮件项目的前景自动化库的局限之一是以模态方式完成的。

这样做有很好的理由,您的用户在您的LOB应用程序中,然后您的代码要他们阅读Outlook中的电子邮件,您已经使用COM自动化库进行Outlook阅读。现在,工具栏中的Outlook图标会闪烁,因为新的电子邮件模式窗口已打开,但此对话框可能已在您当前的LOB应用程序后面打开。

现在用户需要将上下文切换到Outlook以查看对话框并阅读电子邮件。

如果你可以查看你需要打开这些电子邮件都在同一时间,那么你和Outlook COM自动化会相处得很好:)

否则考虑编写一个插件Outlook和移动电子邮件管理程序进入前景本身。在那里,你可以非常有创意,听起来像你真的只需要一个主界面的细节风格,比如主视图浏览器,所以你有这些电子邮件列表,当用户点击它们时,它们显示在预览检查器中。

也许解决方案是使用你的逻辑将这些邮件移动到Outlook中的 特定的文件夹,然后使用Outlook的自动化,使这个 文件夹在Outlook中的当前活动窗口,然后用户可以决定 哪些电子邮件他们想要行动与否。

+0

感谢您的帮助@Chris。 –

相关问题