我已經使用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。我喜歡添加跟蹤/調試它的想法。我將不得不弄清楚如何逐句通過代碼,以便我可以看到可能花費最長時間的地方。謝謝你們!
延遲可能只是由加載.NET CLR和VSTO運行時造成的。你在運行什麼硬件? – 2010-01-31 18:30:21
不知道如何,但你可以把跟蹤消息,看看哪一行正在這段時間? – shahkalpesh 2010-01-31 18:48:32
你可以在聲明類型爲'MailItem'的變量的類級聲明一行嗎?我想,這是第一行可能導致暫停(其中可能是加載包含'MailItem'類的程序集/ COM dll。 – shahkalpesh 2010-01-31 18:58:52