Vb.net 使用位图没有结果

Vb.net 使用位图没有结果,vb.net,visual-studio-2012,Vb.net,Visual Studio 2012,下面是一段代码片段: Dim BMf As Bitmap BMf = New Bitmap(PicBox.Width, PicBox.Height) Call FourierPlot(PlotHeight, PlotWidth, RPMArray, CoefArray, Count, 2, BMf) Me.PicBox.Image = BMf BMf.Dispose() 子例程中包含以下代码: Dim myGraphics As Graphics = Graphics.FromIm

下面是一段代码片段:

 Dim BMf As Bitmap
 BMf = New Bitmap(PicBox.Width, PicBox.Height)
 Call FourierPlot(PlotHeight, PlotWidth, RPMArray, CoefArray, Count, 2, BMf)
 Me.PicBox.Image = BMf
 BMf.Dispose()
子例程中包含以下代码:

 Dim myGraphics As Graphics = Graphics.FromImage(BMf)
 Dim myPen As New Pen(colr)
 ....
 myGraphics.DrawLine(myPen, lastx, lasty, temp1, temp2)
 ....
 myPen.Dispose()
 myGraphics.Dispose()
显示的PicBox由一个边界矩形组成,该矩形带有从相对角绘制的线(我认为这是一个“错误图像”)


关于我做错了什么,有什么建议吗(希望是非常简单的建议?

你不应该调用
BMf.Dispose()
,因为图像将被图片框使用

更新:

好的,小更新,因为这似乎让OP和其他人感到困惑

当你说
Me.PicBox.Image=BMf
时,你设置了对位图的引用。
BMf
PicBox.Image
现在都指向同一个对象。因此,你不应该处理它,因为这样它就不能再使用了。同样,这不是副本,这是同一个对象

以及关于泄漏。删除此行不会导致任何内存或其他泄漏。.NET正在为您管理此项。一旦不需要位图(这意味着没有人引用它=您的图片框将加载另一个图像),它将不再需要,并在下一次运行垃圾回收器时进行处理。这是自动的

如果您确实需要关心资源,例如,如果您经常调用代码并创建新位图,那么您可能需要手动处理它。但在这种情况下,您最好强制垃圾收集器在可能会导致用户延迟的地方运行。您可以这样做:

GC.Collect()

您得到了Dispose()调用。您应该处理旧图像,而不是新图像。因此,在分配image属性之前,请使用
如果Me.PicBox.image不是空的话,那么使用
Me.PicBox.image.Dispose()
。那么他应该怎么做?您的答案不完整。他应该删除这一行,这很明显?”指向“对我来说,指针的行为使我清醒过来。再次感谢你的帮助。