在 outlook 插件的自定义任务窗格中打开的用户控件在窗格关闭时不会被处置
The user control that is opened in custom task pane of outlook plugin, doesn't get disposed when the pane is closed
我正在开发 outlook plugin.I 在 outlook 工具栏中添加了一个按钮,当用户单击该按钮时,web 服务是 called.Depending 根据该 web 服务的结果,用户控件被加载到自定义任务 pane.When 用户关闭了自定义任务窗格,我在用户 control.I 上调用了 dispose 方法,还在其处置事件中处置了此用户控件的子控件,并从 customtaskpanes 中删除了自定义任务窗格list.But内存没有了released.I也把自定义任务处理掉了pane.But没什么happened.So,是我编码的问题,还是outlook的问题?我正在工作在 .net framework 3 上使用 winforms。5.The 每当我按下按钮时,outlook 占用的内存都会不断增加。
如果没有任何代码示例,很难判断是否发生了内存泄漏。请记住,分析托管内存可能很棘手...
但是,我的建议是您可能不应该手动处理 VSTO 任务窗格控件。如果用户单击隐藏任务窗格,则任务窗格不是 "destroyed",您不应该注销它。它的 Visible 属性 设置为 false
。
请参阅下面我的 Startup.addin.cs 中的示例代码,它可以切换 TaskPane 可见性。
public const string productName = "myMillionDollarAddin";
private void RegisterTaskPane()
{
var tskControl = new TaskPaneControl();
CustomTaskPane taskPane = this.CustomTaskPanes.Add(tskControl, productName);
taskPane.Visible = true;
}
public void ShowHideTaskPane()
{
var taskPane = this.CustomTaskPanes.FirstOrDefault(ctp => ctp.Title == productName);
if (taskPane == null)
{
RegisterTaskPane();
}
else
{
var visibility = taskPane.Visible;
taskPane.Visible = !visibility;
}
}
我正在开发 outlook plugin.I 在 outlook 工具栏中添加了一个按钮,当用户单击该按钮时,web 服务是 called.Depending 根据该 web 服务的结果,用户控件被加载到自定义任务 pane.When 用户关闭了自定义任务窗格,我在用户 control.I 上调用了 dispose 方法,还在其处置事件中处置了此用户控件的子控件,并从 customtaskpanes 中删除了自定义任务窗格list.But内存没有了released.I也把自定义任务处理掉了pane.But没什么happened.So,是我编码的问题,还是outlook的问题?我正在工作在 .net framework 3 上使用 winforms。5.The 每当我按下按钮时,outlook 占用的内存都会不断增加。
如果没有任何代码示例,很难判断是否发生了内存泄漏。请记住,分析托管内存可能很棘手...
但是,我的建议是您可能不应该手动处理 VSTO 任务窗格控件。如果用户单击隐藏任务窗格,则任务窗格不是 "destroyed",您不应该注销它。它的 Visible 属性 设置为 false
。
请参阅下面我的 Startup.addin.cs 中的示例代码,它可以切换 TaskPane 可见性。
public const string productName = "myMillionDollarAddin";
private void RegisterTaskPane()
{
var tskControl = new TaskPaneControl();
CustomTaskPane taskPane = this.CustomTaskPanes.Add(tskControl, productName);
taskPane.Visible = true;
}
public void ShowHideTaskPane()
{
var taskPane = this.CustomTaskPanes.FirstOrDefault(ctp => ctp.Title == productName);
if (taskPane == null)
{
RegisterTaskPane();
}
else
{
var visibility = taskPane.Visible;
taskPane.Visible = !visibility;
}
}