【发布时间】:2014-03-20 09:49:05
【问题描述】:
我正在尝试创建一个带有客户端和服务器的远程桌面应用程序(当然)。
但我发现了一个奇怪的问题,在这段代码中:(其中 bytes() 包含客户端发送的桌面截图。
Public Sub HandleDesktopInfo(ByVal client As ServerClient, ByVal bytes As Byte())
If PictureBox1.Image IsNot Nothing Then
PictureBox1.Image.Dispose())
End If
Dim ms As New IO.MemoryStream(bytes)
Dim bmp = New Drawing.Bitmap(ms)
PictureBox1.Image = bmp
ms.Dispose()
fps += 1
End Sub
问题是它抛出了这个错误:
说“参数无效”。
奇怪的是,它只会在
时引发该错误If PictureBox1.Image IsNot Nothing Then
PictureBox1.BeginInvoke(Sub() PictureBox1.Image.Dispose())
End If
存在,虽然它说 "Source Not Available...." ,因此没有指向特定的代码行,如果我删除它,它会完美运行。 我还注意到,如果我摇晃表格,它只会引发错误......改变它在我屏幕上的位置(奇怪?),我不明白为什么。如果我让他不动,不会抛出异常……这是怎么回事?
工作解决方案:感谢@jmcilhinney
Dim newimage As Bitmap = PictureBox1.Image
Dim ms As New IO.MemoryStream(bytes)
Dim bmp = New Drawing.Bitmap(ms)
PictureBox1.Image = bmp
ms.Close()
ms.Dispose()
If newimage IsNot Nothing Then
newimage.Dispose()
End If
【问题讨论】:
-
你需要关闭你的内存流:ms.Close 你只是在处理它。最好将其包装在 using 语句中。
-
@Mr CoDeXeR,我同意应该使用 Using 语句,但这也只会调用 Dispose。但这不是问题,因为无论如何都会关闭 MemoryStream,即当前代码可以改进但不是问题。
-
@MrCoDeXeR 我认为 Dispose 已经在为我过去在网上阅读的内容调用 Close ......显然不是。
-
另外,如何进一步改进?有什么建议吗?