在Outlook插件的自定义任务窗格中打开的用户控件在窗格关闭时不会被释放

时间:2015-12-18 14:30:11

标签: c# winforms memory-leaks vsto outlook-addin

我正在开发一个outlook插件。我在outlook工具栏中添加了一个按钮,当用户点击该按钮时,会调用一个web服务。根据该webservice的结果,在自定义任务窗格中加载一个usercontrol。当一个用户关闭自定义任务窗格,我在用户控件上调用dispose方法。我还将此用户控件的子控件放置在其处置事件中,并从customtaskpanes列表中删除自定义任务窗格。但是内存未释放.I也没有发生任何事情。所以,这是我的编码问题,还是Outlook的问题?我正在使用.net框架3.5上的winforms。每当我使用外观的内存一直在增加按下按钮。

1 个答案:

答案 0 :(得分:1)

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

但是,我的建议是您可能不应手动​​处置VSTO任务窗格控件。如果用户单击隐藏任务窗格,则任务窗格不会被销毁"你不应该注销它。其可见属性设置为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;
            }
        }