【问题标题】:WPF User Control is causing Out of Memory ExceptionWPF 用户控件导致内存不足异常
【发布时间】:2010-03-08 23:49:53
【问题描述】:

寻找免费的拼写检查解决方案,我认为我这样做很聪明,但我想不是。

我已经创建了一个基于 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 控件即使在清除面板后也没有消失。根据这个结论,我尝试了不同的解决方案来处理这些控件或将它们设置为空,但内存问题不断发生。如果有人可以在这里给我一些建议或想法,我将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    我认为这可能只是因为这些用户控件的创建速度比收集它们的速度快。我已经更改了程序,以便在不需要时不会创建任何这些特殊的用户控件。该程序可以与更易于管理的 WPF 控件数量一起正常工作。

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 2013-06-22
      • 2012-12-15
      • 1970-01-01
      • 2011-05-26
      • 2013-12-09
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      相关资源
      最近更新 更多