Picturebox.Image.Dispose导致ArgumentException?

时间:2014-03-20 00:53:08

标签: vb.net visual-studio-2012

我正在尝试使用客户端和服务器(当然)创建远程桌面应用程序。

但我在这段代码中发现了一个奇怪的问题:(其中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

问题是它抛出了这个错误:

enter image description here

说“参数无效”。

奇怪的部分是它只会抛出错误,如果

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

1 个答案:

答案 0 :(得分:3)

我怀疑问题可能是被处理的Image仍然被分配给PictureBox的Image属性并尝试重新绘制。我建议将Image分配给局部变量,将PictureBox的Image属性设置为Nothing,然后处理Image。