c# - 事件处理程序未添加到新邮件项目

标签 c# event-handling add-in outlook-addin office-2010

我正在尝试创建一个简单的 Outlook 2010 加载项来响应新的附件事件。 下面的代码仅在我取消注释 MessageBox.Show 行时才有效。但是删除它似乎没有添加事件处理程序。我在程序流程中遗漏了什么,这意味着模态消息框会影响事件处理程序的放置?

public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Application.Inspectors.NewInspector += Inspectors_NewInspector;
    }

    void Inspectors_NewInspector(Outlook.Inspector Inspector)
    {
        Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
        if (mailItem != null)
        {
            if (mailItem.EntryID == null)
            {
                mailItem.BeforeAttachmentAdd += mailItem_BeforeAttachmentAdd;
                //System.Windows.Forms.MessageBox.Show("Twice");
            }
        }
    }

    void mailItem_BeforeAttachmentAdd(Outlook.Attachment Attachment, ref bool Cancel)
    {
        Cancel = true;
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
    }

最佳答案

引发事件的 COM 对象必须是事件的。在您的情况下,您使用的是多点表示法,编译器会创建一个隐式变量;一旦该变量被垃圾收集,它将停止触发事件。邮件项目同上 - 您需要捕获 inspector.Close 事件并从 _mailItems 列表中删除项目;

public partial class ThisAddIn
{
    private Inspectors _inspectors;
    private List<MailItem> _mailItems = new List<MailItem>();

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        _inspectors = Application.Inspectors;
        _inspectors.NewInspector += Inspectors_NewInspector;
    }

    void Inspectors_NewInspector(Outlook.Inspector Inspector)
    {
        Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
        if (mailItem != null)
        {
            if (mailItem.EntryID == null)
            {
                _mailItems.Add(mailItem):
                mailItem.BeforeAttachmentAdd += mailItem_BeforeAttachmentAdd;
                //System.Windows.Forms.MessageBox.Show("Twice");
            }
        }
    }

    void mailItem_BeforeAttachmentAdd(Outlook.Attachment Attachment, ref bool Cancel)
    {
        Cancel = true;
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
    }

关于c# - 事件处理程序未添加到新邮件项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24576890/

相关文章:

c# - 可以在后台线程构建表单,然后在 UI 线程上显示

java - 在 EWS api 的帮助下使用 java 创建带有附件的 Outlook 日历定期 session

javascript - 使用区域本身上的按钮删除区域

event-handling - 设计多输入软件

c# - 创建 'Custom Designer' Visual Studio 2010 加载项

javascript - Chirpy 和 ASP.NET 4

visual-studio-2010 - 每次构建前清除 "Error List"警告的 Visual Studio 2010 插件/代码

c# - 如何在 C# 中增加堆栈大小? 1MB 不够。我有 32GB 可用内存

c# - 列表框滚动条不跟随所选项目(使用 ICollectionView)

javascript - 为什么这个事件跟踪器不起作用?