我正在创建一个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