我正在使用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;
}
}
如您所见,除了最后一部分中的“注册表阅读器”,我没有做任何特别的事情。您是否认为这会导致Outlook启动缓慢?如果是这样,我该如何对其进行优化。
答案 0 :(得分:1)
您将因加载.Net系统而受到处罚。曾经有一个“热身”注册表项,可用于迫使Outlook加载正确版本的.Net运行时,而不会受到惩罚,但是该项不再起作用。
我能够解决该问题的唯一方法是在Delphi中创建一个存根加载项(如果不是更好,C ++也会运行得很好),什么也没做,只能由Outlook加载(大约20毫秒)并启动计时器。当计时器触发时(Outlook将处于空闲状态并且不监视外接程序),它将使用IManagedAddin接口加载从属.Net外接程序。