Я надеюсь, что кто-то может мне помочь. Позвольте мне сначала заявить, что я очень любительский программист.C# SyncObject с Outlook Interop
У меня есть учетная запись электронной почты IMAP в Outlook. Я хочу взять одну папку электронной почты в этой учетной записи и гарантировать, что все сообщения в этой папке в Outlook будут программным образом синхронизироваться с тем, что на сервере электронной почты IMAP. Я создал код ниже, но у меня возникают следующие вопросы/вопросы:
- Является ли SyncObject правильным механизмом, который я должен использовать для синхронизации этой папки Outlook с сервером imap?
Если я запустил его 10 раз, он будет проходить без ошибок 2 или 3 раза, но затем он выйдет из строя в этой строке:
sync = app.Session.SyncObjects [папка];
со следующей ошибкой:"System.Runtime.InteropServices.COMException (0x80020005): Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))\r\n at Microsoft.Office.Interop.Outlook.SyncObjects.get_Item(Object Index)\r\n at WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) in C:\Users\DKS\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 38"
Любые идеи об этой ошибке?
Когда я запускаю его, успешно ли он выполняется или нет, он всегда оставляет процесс outlook.exe запущенным на моей машине. Как закрыть interop?
private void button1_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Outlook.Application app = null; Microsoft.Office.Interop.Outlook._NameSpace ns = null; Microsoft.Office.Interop.Outlook.MAPIFolder folder = null; Microsoft.Office.Interop.Outlook.SyncObject sync = null; try { app = new Microsoft.Office.Interop.Outlook.Application(); ns = app.GetNamespace("MAPI"); folder = ns.Folders["yahoo_imap_mail"].Folders["Trash"]; sync = app.Session.SyncObjects[folder]; sync.Start(); } catch (System.Runtime.InteropServices.COMException ex) { MessageBox.Show(ex.ToString()); Console.WriteLine(ex.ToString()); } finally { ns = null; app = null; folder = null; sync = null; } MessageBox.Show("Complete"); }
Я вижу, что _syncObj.Start() будет синхронизироваться с папкой, но есть ли способ узнать, завершено ли задание синхронизации? – ajivani
Да, вы видите в присваивании кода синхронизации. Эта функция выполняется по завершении – BugFinder