gpt4 book ai didi

c# - Outlook ItemAdd 事件未触发

转载 作者:行者123 更新时间:2023-12-03 20:21:20 25 4
gpt4 key购买 nike

我们编写了一个 Outlook 加载项,它在发送电子邮件时启动一个操作。只有在撰写电子邮件期间设置了标志时,才会发生该操作。该标志是通过单击切换按钮设置的。当发送电子邮件时,会触发一个事件,我们将电子邮件的 ID 存储在队列中。如果邮件出现在已发送文件夹中,则应触发事件,如果在队列中发现相同的 ID,则应执行操作。

下面我有两种方法。 Application_ItemSend 将在发送电子邮件时发生,并在该方法中在 SentItemsQueue 上调用 EnQueue。 EnQueue 方法将一个事件附加到 Sent Items 文件夹,当添加一个项目时,它应该触发一个事件来启动我们的操作。

当在 Outlook 中编写和发送电子邮件时,这一切正常。如果我们从外部程序(如 Word)中启动电子邮件,则 Application_ItemSend 会被执行,但 EMailFoundInSentItems(附加在 EnQueue 中)不会被触发。为什么事件永远不会触发?

public partial class ThisAddIn {    

void Application_ItemSend(object item, ref bool cancel)
{
try
{
Trace.TraceInformation("E-mail is being sent. Checking for archive flag.");
MailItem mail = item as MailItem;
bool? archive = mail.GetArchiveFlag();

if (archive == true)
{
Trace.TraceInformation("Archive flag was set, going to queue e-mail for archiving.");
this.SentItemsQueue.EnQueue(mail);
}

Marshal.ReleaseComObject(mail);
}
catch (System.Exception ex)
{
Trace.TraceError("An exception was thrown while trying to archive a sent mail item. Exception: {0}.", ex.ToString());
}
}
...

public class SentItemsArchiveQueue
{
public void EnQueue(MailItem mail)
{
// remove and re-add handler (remove first, so it's not registered twice)
mail.SaveSentMessageFolder.Items.ItemAdd -= new ItemsEvents_ItemAddEventHandler(EMailFoundInSentItems);
mail.SaveSentMessageFolder.Items.ItemAdd += new ItemsEvents_ItemAddEventHandler(EMailFoundInSentItems);

this.Queue.Add(mail.ConversationIndex);
Trace.TraceInformation("Queue ConversationIndex is {0}", mail.ConversationIndex);
}
...

最佳答案

引发事件的对象(Items 集合)必​​须保持事件状态才能引发事件。您正在使用多点表示法,一旦编译器创建的隐式变量超出范围并被垃圾收集,就不会引发任何事件:

public class SentItemsArchiveQueue 
{
private Items _items;

public void EnQueue(MailItem mail)
{
_items = mail.SaveSentMessageFolder.Items;
_items.ItemAdd += new ItemsEvents_ItemAddEventHandler(EMailFoundInSentItems);

this.Queue.Add(mail.ConversationIndex);
Trace.TraceInformation("Queue ConversationIndex is {0}", mail.ConversationIndex);
}

关于c# - Outlook ItemAdd 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23803960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com