Привет,
Обнаружил непонятное для меня поведение 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);
}
тоже плохо работает.
Заранее спасибо за разъяснения по первому вопросу и идеи по второму