2010-01-31 4 views
1

Я написал эту небольшую надстройку VSTO MS Outlook 2003 с использованием C# и Visual Studio 2008. Он предназначен для проверки каждого отправленного почтового отправления для слова «attach» в теле, и если он найден, проверьте количество вложений. Если это число равно нулю, попросите пользователя, действительно ли они хотят отправить сообщение. Он должен работать как функция Gmail labs, которая делает то же самое.Почему моя надстройка Outlook VSTO работает при первом запуске?

Странно, что он работает, но в первый раз, когда я запускаю его, я получаю паузу, так как окно почтового сообщения висит около 45 секунд. Как только это пройдет, он работает очень быстро, в остальное время я открываю Outlook. Если я закрою Outlook, то, в следующий раз, когда я его снова открою и отправлю сообщение, я снова задержу это ожидание.

Любые идеи, народы?

Вот код для моего Add-In:

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.

Обновление: Я запускаю это на пятилетнем ноутбуке Dell, 2 ГБ RAM и I-don-t-know-Intel. Мне нравится идея добавления трассировки/отладки. Мне нужно будет выяснить, как пройти через код, чтобы я мог видеть, где это может занять самое длинное время. Благодарю вас!

+0

Задержка может быть вызвана загрузкой .NET CLR и среды выполнения VSTO. На каком оборудовании вы работаете? –

+0

Не знаете, как, но могли ли вы поместить сообщения трассировки, чтобы увидеть, какая линия занимает это время? – shahkalpesh

+0

Не могли бы вы объявить строку на уровне класса, которая объявила переменную типа 'MailItem'? Я предполагаю, что это первая строка, которая может вызвать паузу (при этом она может загружать сборку/COM-библиотеку, содержащую класс «MailItem». – shahkalpesh

ответ

0

Хорошо, я действительно смущен. Задержка, которую я наблюдал, была просто синхронизацией Outlook с моим сервером Exchange. Я был дома, когда тестировал, и Outlook по-прежнему подключался через HTTP. Я вижу, что он работает быстро сегодня, в офисе, поэтому нет HTTP. Спасибо за ответы в любом случае.

:-)

Смежные вопросы