我正在創建一個Outlook郵件項目對象並監視發送事件。所有顯示都很好,但是當Send事件觸發時,事件在我的應用程序的後臺線程中引發。這是一個問題,原因是此事件創建了通過我的應用程序發送的電子郵件記錄,該電子郵件被添加到對象集合中。因此,該集合引發後臺線程上的List Changed事件,從而在顯示該集合的控件上導致跨線程控制訪問。在後臺線程上引發的Outlook電子郵件發送事件
這裏是我的事件聯播:
((Outlook.ItemEvents_10_Event)item).Send += new Microsoft.Office.Interop.Outlook.ItemEvents_10_SendEventHandler(ItemSendWatcher_Send);
該事件在保持該消息的引用的基本類迷上了發送,並委託時提出的發送事件來調用。這允許我將電子郵件對象的實例傳遞給委託。
這是我的處理程序:
void ItemSendWatcher_Send(ref bool Cancel)
{
if (itemSendDelegate != null)
{
this.itemSendDelegate(this.item, ref Cancel); //The delegate with the mail item
}
Marshal.ReleaseComObject(item);
itemSendDelegate = null;
}
這是該事件的正確的行爲還是我構造對象時做錯了什麼?謝謝你的幫助。
編輯:只是爲了澄清,我沒有處理UI層中的事件,而是處理業務對象。從發送事件處理程序調用的委託會導致在內部將新對象添加到列表中,這會導致列表的ListChanged事件被引發,導致在顯示此列表的控件中調用處理程序。我希望這能澄清我試圖達到的目標。
你能展示更多的代碼嗎? – 2010-09-03 11:36:18
現在稍微更清晰,這是一個已知的問題:http://stackoverflow.com/questions/2354438/mvvm-best-practice-to-pass-dispatcher-to-the-viewmodel – 2010-09-03 13:05:45