我正在尝试使用客户端和服务器(当然)创建远程桌面应用程序。
但我在这段代码中发现了一个奇怪的问题:(其中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
存在,虽然它说“源不可用......”,因此没有指向特定的代码行,如果我删除它,它的工作完美。 我也注意到,它只会抛出错误,如果我摇动周围的形式...改变它在我的屏幕上的位置(很奇怪?),我不明白为什么。如果我让他离开,没有例外被抛出......这里发生了什么?
工作解决方案:谢谢@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
答案 0 :(得分:3)
我怀疑问题可能是被处理的Image仍然被分配给PictureBox的Image属性并尝试重新绘制。我建议将Image分配给局部变量,将PictureBox的Image属性设置为Nothing,然后处理Image。