WPF用户控件导致内存不足异常

时间:2010-03-08 23:49:54

标签: vb.net winforms memory-leaks wpf-controls elementhost

寻找一个免费的拼写检查解决方案,我认为我这么聪明,但我猜不是。

我已经创建了一个基于Windows窗体的应用程序,我希望该窗体将用户指定数量的用户控件(带有文本框)添加到面板上。然后,用户可以单击某个按钮,清除此面板上的控件并添加新控件。用户执行某些操作并重复该过程。现在,我希望这些文本框能够支持拼写检查并查看完整的解决方案。

WPF文本框支持拼写检查,常规win形式的拼写检查不支持拼写检查。我以为我可以通过将它们添加到ElementHost对象来使用这些WPF文本框,而ElementHost对象又是在一个面板中。该面板将是用户控件。

因此,在我的应用程序中,我可以将这些用户控件的实例添加到表单上,并利用.NET的拼写检查功能。这实际上有效,但在使用应用程序一段时间后,发现由于内存不足错误,应用程序最终会冻结我。我已经确定了这些WPF控件的内存错误,因为普通文本框不会出现这个问题。

当打开窗口并指定控件数时,这几乎就是添加控件的方式:

Dim xOffset As Integer = 0
For i As Integer = 0 To theNumber
    Dim myUserControl As New SpecialUserControl()
    myPanel.Controls.Add(myUserControl)
    myUserControl.Location = New Point(7, 7)
    myUserControl.Location = New Point(xOffset, 7)
    xOffset = xOffset + 207
Next

请注意:

  • myPanel是表单上的面板
  • SpecialUserControl是具有WPF文本框的用户控件(在ElementHost对象中)

当用户按下按钮时,面板被清除:

myUserControl.Controls.Clear()

然后,用户可以重复此过程。

当我试图找到解决方案时,互联网上有很多结果我认为我遇到的问题是因为即使清除了面板后WPF控件也不会消失。根据这个结论,我尝试了不同的解决方案,关于处理这些控件或将它们设置为什么,但内存问题不断发生。如果有人可以在这里给我一些建议或想法,我真的很感激。

1 个答案:

答案 0 :(得分:0)

我认为这可能仅仅是因为这些用户控件的创建速度比收集它们的速度快。我已经更改了程序,因此如果没有必要,它不会创建任何这些特殊的用户控件。该程序可以正常使用更多可管理的WPF控件。