【问题标题】:Clear Memory when using PictureBox Control使用 PictureBox 控件时清除内存
【发布时间】:2017-04-19 22:19:36
【问题描述】:

我有一个 TreeView,当您单击一个节点时,代码会获取该节点的标记,然后在 PictureBox 控件中显示一张图片。在点击了这么多之后,我收到了一条控制台消息:

A first chance exception of type 'System.OutOfMemoryException' occurred in System.Drawing.dll

之后,图片框将不再加载图片。在新图像加载之前,我尝试在 PictureBox 上使用 Dispose,但随后图像未显示在 PictureBox 中。下面的代码就是我为此使用的所有代码。

pbMainTools.Image = Image.FromFile(strImagePath & ".jpg")

我还使用节点中的标记从 DataTable 获取图像的路径:

For Each NewTool As DataRow In NTDS.Tools.Select("ToolID = " & tvTag)
     strImagePath = NewTool.Item("Image")
Next

【问题讨论】:

    标签: vb.net memory picturebox


    【解决方案1】:

    如果您使用了PictureBox.Dispose(),那么您将处置整个控件,使其无法使用(因此无法显示图像)。要仅处理图像,请执行以下操作:

    pbMainTools.Image.Dispose()
    

    请注意,这并不一定会阻止应用程序抛出 OutOfMemoryException,原因之一可能是图像太大,GDI+ 无法加载到内存中。

    【讨论】:

    • 好吧,所有的图像都显示得很好,只是在点击了这么多之后才会发生。所以我假设当你加载它时它会将每个图像都保存在内存中。
    • @xRuhRohx :是的,我明白这一点。我刚刚指出OutOfMemoryException 也可能是由其他问题引起的,所以你知道万一PictureBox.Image.Dispose() 不起作用(我认为它不起作用?)。
    • 这批照片在添加到应用程序之前我忘记调整大小。我把它们缩小了,现在没有问题了。所以你建议图像太大让我记得我忘了这样做。当所有其他都是 1400x1050 时,它们就像 5000x4000。
    • @xRuhRohx :嗯,有时人们会忘记简单的事情;)。很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 2023-03-27
    • 2011-07-09
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多