4 c# memory memory-leaks toolstrip winforms
我在使用SWF-ToolStrip处理内存泄漏时遇到了麻烦。据此http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=115600#已解决。但是这里似乎没有。
有人知道如何解决这个问题吗?
.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)
这为我们解决了