2017-05-24 12 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"を使って解決し、スレッドを普通に呼び出します。これにより、一度に1つのウィンドウしか開きません。 –

答えて

0

あなたはこれを好まないかもしれない...しかし、あなたしてください試してはいけません。(

Outlook COM interfエースはこれを防ぐのを非常に困難にしていますが、メールアイテムを表示するOutlookオートメーションライブラリの制限の1つは、モーダルなやり方で行われます。

あなたのLOBアプリケーションにユーザーがいて、OutlookでCOMオートメーションライブラリを使用してOutlookで電子メールを読んでもらいたい場合、その理由があります。新しい電子メールモーダルウィンドウが開いたので、ツールバーのOutlookアイコンが点滅していますが、このダイアログが現在のLOBアプリの後ろに開いている可能性があります。

これで、ダイアログを表示して電子メールを読むために、コンテキストをOutlookに切り替える必要があります。

あなたは同時に、これらの電子メールのすべてを開くためにあなたの必要性を確認できた場合は、あなたとの見通しのCOMオートメーションがうまく:)

に沿って取得しますそれ以外の場合はOutlookのプラグインを書くとにあなたの電子メールの管理ルーチンを移動することを検討見通しそのもの。そこには非常に創造的なことがありますが、主な見通しブラウザのようなインターフェイスのマスター - ディテールスタイルだけが本当に必要なようなサウンドなので、これらの電子メールのリストがあり、ユーザーがそれらをクリックするとプレビューインスペクタに表示されます。

たぶんソリューションは、ユーザーが た電子メールを決めることができ、その後、この は見通しで、現在アクティブなウィンドウをフォルダにするために、Outlookの自動化を使用し、見通しに 特定のフォルダに、これらのメッセージを移動するために、あなたのロジックを使用することです彼らは行動したい、あるいはしたくない。

+0

ご協力ありがとうございます@クリス。 –

関連する問題