VSTO加载项在一夜之间打开时崩溃Outlook

时间:2017-01-12 17:05:11

标签: c# vsto outlook-addin outlook-2010 outlook-2013

添加

我为Outlook编写了一个VSTO加载项。加载项的关键是在用户回复电子邮件时在功能区上放置一个按钮,以便他们快速将电子邮件敏感度设置为机密或恢复为正常。目前,在电子邮件上执行此操作的过程是多个步骤,我的客户希望只需单击一下即可。根据当前电子邮件的敏感度,按钮图标为红色或绿色。

灵敏度=正常=>红色按钮

敏感度=机密=>绿色按钮

我发现了一些基本用例:

  1. 用户创建新电子邮件
    • 在这种情况下,按钮应该从红色开始并在单击时更改。
  2. 用户创建对电子邮件的回复
    • 在这种情况下,按钮应该与父电子邮件的颜色相同。如果父电子邮件为红色,则按钮应为红色,如果为绿色则按钮应为绿色
  3. 用户编辑草稿
    • 如果用户有草稿,则该按钮应反映已保存草稿的Sensitivity属性的值。
  4. 我选择完成此操作的方式是使用功能区XML中的两个按钮覆盖getVisible属性,并根据当前MailItem设置可见的相应按钮。另一种方法是使用一个按钮并根据MailItem灵敏度属性切换图像和功能。

    无论我的选择如何,我认为我会遇到同样的问题,因为Office Ribbon是一个静态对象,在创建Explorer或Inspector时绘制一次,你需要通过调用InvalidateUI来强制重绘方法

    考虑到这一点,为了覆盖我上面的3个用例,我不得不从应用程序中查看一些事件。

    我不确定我是否可以发布确切的代码,但其基础知识如下:

    On Startup subscribe to:
        Application.ActiveExplorer().SelectionChange
        Application.Inspectors.NewInspector
    
    On SelectionChange
        If there is one item selected, and that one item is a MailItem
            Refresh the Ribbon UI - Call Ribbon.InvalidateUI();
    
    On NewInspector
        If the Inspector.CurrentItem is a MailItem
            Refresh the Ribbon UI - Call Ribbon.InvalidateUI();
    

    SelectionChange事件处理程序涵盖用户是否在Outlook 2013中向上点击并选择内联草稿。它将在TabSet TabComposeTools,TabMessage中绘制功能区。这会在必要时将图标放在主外观窗口功能区上。

    NewInspector事件处理程序涵盖用户是否双击草稿,创建新窗口。

    问题

    我一直在收到有关Outlook崩溃的报告。起初我的日志记录有限,并且依赖于Outlook生成的事件日志。 不是很有帮助。

    然后我实现了log4Net,我正在写入用户配置文件的AppData文件夹中的日志文件。 这给了我一些见解

    我在每个方法代码块周围都包含了一个try / catch,所以我的加载项中没有任何内容(我写的)在try / catch之外运行,每个块只捕获异常,记录它并抛出它。 这是尝试找到问题

    我的最新日志显示了UI刷新,所以它调用了我的GetVisibility覆盖,基于如果control.Context是Explorer或Inspector我将ActiveInlineResponse或CurrentItem作为MailItem,读取Sensitivity属性并基于此如果调用处理程序的按钮应该可见,则返回True或False。 (我有两个按钮的处理程序)

    当我将ActiveInlineResponse转换为MailItem时,似乎发生了崩溃。我日志中的下一个项目是我在Addin的Startup处理程序中执行的日志记录。 (因此用户重新启动了Outlook)

    其他详情

    • 用户群当前正在运行Outlook 2010 - Outlook 2016。
    • 我们有一个加载项可以在所有这些加载项上运行,因为我们所做的任何事情都不应该针对任何版本的办公室。
    • 加载项在Outlook 2010上运行正常。
    • 所选的加载项项目是Outlook 2013-2016。
    • 我在Designer上使用Ribbon XML,因为Designer不支持在TabSets中放置按钮。

    更新

    我已经将一些事件处理程序局部变量放入我的加载项类中,如https://www.experts-exchange.com/questions/27305112/Problem-with-VSTO-event-handler-going-out-of-scope-in-Outlook-AddIn.html所描述的那样我没有看到错误,但也没有得到太多反馈,因为我在星期五这样做了而这个星期一是假期。如果这似乎是“修复”,我会更新答案。

0 个答案:

没有答案