2010-03-08 41 views
0

寻找一个免费的拼写检查解决方案,我以为我这么做很聪明,但我猜不是。WPF用户控件导致内存不足异常

我已经创建了一个基于Windows窗体的应用程序,我希望表单可以将用户指定量的用户控件(带有文本框)添加到面板上。然后用户可以点击某个按钮并清除此面板上的控件并添加新的控件。用户做了一些事情,并重复这个过程。现在,我希望这些文本框支持拼写检查,并且为了免费的解决方案而遍布各地。

WPF文本框支持拼写检查,常规win表单中的那些文本框没有。我想我可以将这些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控件即使在清除面板后仍未消失。根据这个结论,我尝试了不同的解决方案来处理这些控件,或者将它们设置为无,但内存问题一直在发生。如果有人能够在这里给我一些建议或想法,我会非常感激。

回答

0

我已经决定这可能只是由于这些用户控件的创建速度比它们可以收集的速度更快。我已经更改了程序,以便它不会创建任何这些特殊的用户控件(如果没有必要)。该程序可以更好地管理WPF控件的数量。