在outlook插件的自定义任务窗格中打开的用户控件没有';关闭窗格时无法处理

本文关键字:处理 用户 任务 自定义 插件 outlook 控件 | 更新日期: 2023-09-27 18:27:16

我正在开发一个outlook插件。我在outlook工具栏中添加了一个按钮,当用户单击该按钮时,就会调用Web服务。根据该Web服务的结果,用户控件将加载到自定义任务窗格中。当用户关闭自定义任务窗格时,我会调用用户控件上的dispose方法。我还在其disposed事件中处理此用户控件的子控件,并从customtaskpanels列表中删除了自定义任务窗格。但记忆并没有被释放。我还处理了自定义任务窗格。但什么也没发生。那么,这是我的编码问题,还是前景问题?我在.net框架3.5上使用winforms。每当我按下按钮时,outlook占用的内存就会不断增加。

在outlook插件的自定义任务窗格中打开的用户控件没有';关闭窗格时无法处理

如果没有任何代码样本,很难判断是否发生内存泄漏。请记住,分析托管内存可能很棘手。。。

但是,我的建议是,您可能不应该手动处理VSTO任务窗格控件。如果用户单击隐藏任务窗格,则任务窗格不会被"销毁",您不应注销它。它的Visible属性设置为false。请参阅下面Startup.addin.cs中的示例代码,该代码可用于切换任务窗格的可见性。

        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;
            }
        }