2010-01-31 61 views
1

我已經使用C#和Visual Studio 2008編寫了這個小小的MS Outlook 2003 VSTO加載項。它是爲了檢查每個正在發送的單詞「附加」在正文中的郵件項目,如果找到,然後檢查數量附件。如果該數字爲零,則詢問用戶是否確實意圖發送該消息。它應該像Gmail實驗室功能一樣工作,它可以執行相同的操作。爲什麼我的VSTO Outlook加載項首次運行時掛起?

奇怪的是,它的工作原理,但我第一次運行它,我得到了一個暫停,就像郵件項目窗口掛了大約45秒。一旦它過去了,它會在我打開Outlook的其餘時間內運行得非常快。如果我關閉Outlook,那麼下一次我重新打開它併發送消息時,我會再次等待。

任何想法,人?

下面是我的外接代碼:

namespace OutlookAttacher 
{ 
    public partial class ThisAddIn 
    { 
     private void ThisAddIn_Startup(object sender, System.EventArgs e) 
     { 
      this.Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); 
     } 

     private void ThisAddIn_Shutdown(object sender, System.EventArgs e) 
     { 
     } 

     void Application_ItemSend(object Item, ref bool Cancel) 
     { 
      if (Item is Microsoft.Office.Interop.Outlook.MailItem) 
      { 
       Microsoft.Office.Interop.Outlook.MailItem currentItem = Item as Microsoft.Office.Interop.Outlook.MailItem; 
       Cancel = true; 

       if (currentItem.Body.Contains("attach")) 
       { 
        if (currentItem.Attachments.Count > 0) 
        { 
         Cancel = false; 
         //MessageBox.Show("This message will be sent now."); 
         currentItem.Send(); 
        } 
        else 
        { 
         DialogResult ans = MessageBox.Show("This message has no attachments. Are you sure you want to send it?", "OutlookAttacher", MessageBoxButtons.YesNo); 
         if (ans.Equals(DialogResult.Yes)) 
         { 
          Cancel = false; 
          //MessageBox.Show("This message will be sent now."); 
          currentItem.Send(); 
         } 
        } 
       } 
       else 
       { 
        Cancel = false; 
        //MessageBox.Show("This message will be sent now."); 
        currentItem.Send(); 
       } 
      } 
     } 
    } 
} 

對於提高代碼的任何建議,歡迎爲好,因爲這是我在Outlook加載首次嘗試。

更新:我上了5年的戴爾筆記本電腦在運行此,2 GB RAM和我鴕鳥政策,知道,英特爾的CPU。我喜歡添加跟蹤/調試它的想法。我將不得不弄清楚如何逐句通過代碼,以便我可以看到可能花費最長時間的地方。謝謝你們!

+0

延遲可能只是由加載.NET CLR和VSTO運行時造成的。你在運行什麼硬件? – 2010-01-31 18:30:21

+0

不知道如何,但你可以把跟蹤消息,看看哪一行正在這段時間? – shahkalpesh 2010-01-31 18:48:32

+0

你可以在聲明類型爲'MailItem'的變量的類級聲明一行嗎?我想,這是第一行可能導致暫停(其中可能是加載包含'MailItem'類的程序集/ COM dll。 – shahkalpesh 2010-01-31 18:58:52

回答

0

好吧,我真的很尷尬。我看到的延遲只是Outlook與我的Exchange服務器同步。我在測試時在家,Outlook仍然通過HTTP連接。我看到它今天在辦公室很快運行,所以沒有HTTP。無論如何感謝您的答覆。

:-)

相關問題