使用 PictureBox 控件时清除内存
Clear Memory when using PictureBox Control
我有一个 TreeView,当您单击一个节点时,代码获取该节点的标记,然后在 PictureBox 控件中显示图片。点击这么多之后,我收到一条控制台消息:
A first chance exception of type 'System.OutOfMemoryException' occurred in System.Drawing.dll
之后 PictureBox 将不再加载图片。在加载新图像之前,我尝试在 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
如果您使用了 PictureBox.Dispose()
,那么您将丢弃 整个控件 ,使其无法使用(因此您无法显示图像)。要仅处理图像,请执行:
pbMainTools.Image.Dispose()
请注意,这不一定会阻止应用程序抛出 OutOfMemoryException
,因为一个原因可能是图像太大,GDI+ 无法加载到内存中。
我有一个 TreeView,当您单击一个节点时,代码获取该节点的标记,然后在 PictureBox 控件中显示图片。点击这么多之后,我收到一条控制台消息:
A first chance exception of type 'System.OutOfMemoryException' occurred in System.Drawing.dll
之后 PictureBox 将不再加载图片。在加载新图像之前,我尝试在 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
如果您使用了 PictureBox.Dispose()
,那么您将丢弃 整个控件 ,使其无法使用(因此您无法显示图像)。要仅处理图像,请执行:
pbMainTools.Image.Dispose()
请注意,这不一定会阻止应用程序抛出 OutOfMemoryException
,因为一个原因可能是图像太大,GDI+ 无法加载到内存中。