Почему моя надстройка VSTO Outlook зависает при первом запуске? - PullRequest
1 голос
/ 31 января 2010

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

Странно то, что это работает, но при первом запуске я получаю паузу, как будто окно почтового элемента зависло на 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-летнем ноутбуке Dell, 2 ГБ оперативной памяти и не знаю, какой процессор Intel. Мне нравится идея добавления трассировки / отладки. Мне нужно будет разобраться, как пройти по коду, чтобы понять, где он может занять больше всего времени. Спасибо вам всем!

1 Ответ

0 голосов
/ 01 февраля 2010

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

: -)

...