【发布时间】:2018-11-01 21:59:36
【问题描述】:
我在 Outlook 的 C# VSTO 插件中遇到了问题。
启动时注册了一个事件处理程序,当一个项目被选中时,它会更新主资源管理器窗口功能区上的一个按钮。最初(通过 Clickonce)部署时,插件可以完美运行。每次更改选择都会更新按钮。
下面是注册事件处理程序的代码:
Outlook.ExplorerEvents_10_SelectionChangeEventHandler selectionChangeEventHandler;
private void RegisterEvents(Outlook.Explorer Explorer)
{
try
{
log.Debug("Registering Events");
Application.Explorers.NewExplorer += Explorers_NewExplorer;
selectionChangeEventHandler = new Outlook.ExplorerEvents_10_SelectionChangeEventHandler(ThisAddIn_SelectionChange);
Explorer.SelectionChange -= selectionChangeEventHandler;
Explorer.SelectionChange += selectionChangeEventHandler;
this.Application.OptionsPagesAdd -= Application_OptionsPagesAdd;
this.Application.OptionsPagesAdd += Application_OptionsPagesAdd;
Application.ItemSend -= Application_ItemSend;
Application.ItemSend += Application_ItemSend;
log.Debug("Events Registration Succeeded");
}
catch (Exception ex)
{
log.Debug("Event Registration Failed");
log.Error(ex.Message);
log.Error(ex.StackTrace);
}
}
private void Explorers_NewExplorer(Outlook.Explorer Explorer)
{
RegisterEvents(Explorer);
}
这样调用注册方法
RegisterEvents(Application.ActiveExplorer());
但是,在重新启动后,事件处理程序会触发两次,然后再也不会触发。
为了尝试跟踪问题,如果在 app.config 中设置了字符串(如下所示),我添加了一行来启动调试器
if (String.Equals(ConfigurationManager.AppSettings.Get("attachDebugger"), "true", StringComparison.OrdinalIgnoreCase))
Debugger.Launch();
重新启动后,我可以启动 Outlook 并观察插件无法更新选择。然后关闭 Outlook,在配置中切换 attachDebugger 标志,按钮立即开始工作。
插件中的所有其他功能都有效,因此插件不会停止运行。
我不知道下一步该做什么。如果有人对为什么事件处理程序在重新启动之前和之后应该以不同的方式运行有惊人的洞察力(顺便卸载并重新安装插件会导致它在该会话中再次工作),我将非常感激。当问题无法在调试器下显示时,我也欢迎任何可以提出调试应用程序方法的建议。
【问题讨论】:
标签: c# event-handling vsto outlook-addin