我正在使用C#开发一个简单的Outlook加载项。现在,当我测试发布时,突然Outlook打印错误消息并禁用我的加载项:
This add-in caused Outlook to start slowly. (1.594 seconds)
我不确定是什么原因引起的。我所做的所有Onload
都是这样的:
功能区按钮 我正在使用单个功能区按钮,我在AddIn中初始化如下:
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new MyRibbonButton();
}
功能区按钮构造函数 功能区按钮初始化对象。所以没什么特别的。
public MyRibbonButton()
{
this.guiSettings = new AppSettingsManager(root.localmachine, "GUI", false);
}
...
public AppSettingsManager(root type, string subpath, bool writable)
{
if (subpath != "")
{
this.PATH += @"\" + subpath;
}
this.type = type;
this.writable = writable;
}
图标
在相同的MyRibbonButton
类中,我根据注册表中的值声明我想用于我的按钮的图标。
public Bitmap imageSuper_GetNotifyImage(IRibbonControl control)
{
switch (guiSettings.GetValueInt32("Icon", 1))
{
case 1:
return Properties.Resources.icon1;
case 2:
return Properties.Resources.icon2;
case 3:
return Properties.Resources.icon3;
default:
return Properties.Resources.icon1;
}
}
正如你所看到的,除了最后一部分中的Registry Read之外,我没有做任何特别的事情。你认为这会导致Outlook慢慢开始吗?如果是这样,我该如何优化它。
加载.Net系统会受到惩罚。曾经有一个“预热”注册表项,可用于强制Outlook加载正确版本的.Net运行时而不会受到惩罚,但该密钥不再有效。
我能够解决这个问题的唯一方法是在Delphi中创建一个存根插件(如果不是更好的话,C ++也能正常工作)除了由Outlook(大约20ms)加载并启动计时器之外什么都不做。当计时器触发时(Outlook将处于空闲状态而不监视插件),它将使用IManagedAddin接口加载从属.Net插件。