ToolStrip内存泄漏

4 c# memory memory-leaks toolstrip winforms

我在使用SWF-ToolStrip处理内存泄漏时遇到了麻烦。据此http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=115600#已解决。但是这里似乎没有。

有人知道如何解决这个问题吗?

col*_*ier 5

.NET 3.5 SP1和.NET 4.0中似乎仍然存在此问题。

要重现该问题,您必须创建一个ToolStrip,其中的项目数超过其显示的数量,这将导致它创建一个溢出按钮。仅当您实际单击溢出按钮时,才会出现该问题。单击它会导致创建一个ToolStripOverflow对象,该对象订阅Microsoft.Win32.UserPreferenceChangedEventHandler事件。ToolStrip不会处理ToolStripOverflow对象,该对象会导致事件处理程序无法删除并导致泄漏。

这在一个大型应用程序中产生了巨大的问题,该应用程序创建了带有ToolStrips的表单。

解决方法是更改​​托管ToolStrip的窗体或控件的Dispose方法,如下所示:

protected override void Dispose(bool disposing)
{

    if (disposing)
    {
        var overflow = toolStrip1.OverflowButton.DropDown as ToolStripOverflow;
        if (overflow != null)
            overflow.Dispose();
    }


    if (disposing && (components != null))
    {
        components.Dispose();
    }
    base.Dispose(disposing);
}
Run Code Online (Sandbox Code Playgroud)

这为我们解决了