Почему выгружается Outlook?
От: Аноним  
Дата: 20.09.11 09:59
Оценка:
Привет,

Обнаружил непонятное для меня поведение outlook 2010 (предположительно и outlook 2007).
Пример:
using Microsoft.Office.Interop.Outlook;
using Application = Microsoft.Office.Interop.Outlook.Application;

private void button1_Click(object sender, EventArgs e)
{
    Application application = new Application();
    MAPIFolder draftFolder = application.Session.GetDefaultFolder(OlDefaultFolders.olFolderDrafts);
    Items items = draftFolder.Items;

    while (true)
    {
        DialogResult result = MessageBox.Show("Send?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (result == DialogResult.No)
        {
            return;
        }

        MailItem mail = (MailItem) items.Add(OlItemType.olMailItem);
        mail.Display(1);
    }
}


Запускаю программу, outlook не запущен. Кликаю по кнопке button1, запускается outlook — вижу в процессах.
На вопрос "Send?" отвечаю "Yes". — Открывается оутлуковское окно нового письма. Закрываю его (или отправляю — не важно).
Появляется следующий вопрос "Send?". Ничего не делаю, просто немного (пару секунд) жду и вижу, что outlook выгрузился из процессов!??
Теперь если нажать "Yes" — получу кору

Вопрос — почему outlook выгружается из процессов, если сслыки на его объекты (application, draftFolder, items) не обнулены и не отрелизены?
Вопрос №2 — как сделать, чтоб outlook не выгружался из процессов? — В идеале самому управлять загрузкой и выгрузкой outlook'a.

Такой вариант:
    while (true)
    {
        DialogResult result = MessageBox.Show("Send?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (result == DialogResult.No)
        {
            return;
        }

        Application application = new Application();
        MAPIFolder draftFolder = application.Session.GetDefaultFolder(OlDefaultFolders.olFolderDrafts);
        Items items = draftFolder.Items;

        MailItem mail = (MailItem) items.Add(OlItemType.olMailItem);
        mail.Display(1);
    }

тоже плохо работает.

Заранее спасибо за разъяснения по первому вопросу и идеи по второму
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.