Vb.net NET位图。保存工作一次

Vb.net NET位图。保存工作一次,vb.net,screenshot,Vb.net,Screenshot,我有一个函数,可以获取屏幕截图,保存它,并将文件名返回到图像。我正在使用位图。保存方法,我想我正在清理自己。然而,它只工作一次——如果用户在另一次收到外部异常时调用该例程,并显示一条非常有用的“GDI+中发生了一般错误”消息 它可以一次性保存到目录中(权限似乎不是问题)。而且,如果我更改文件名(比如说,使用一个简单的计数器),它会一直工作——在我看来,只会在临时目录中留下混乱 我读过一些MSDN文章,这些文章让我相信我在文件上留下了一个锁,但“不知道我做错了什么” 代码如下: Function

我有一个函数,可以获取屏幕截图,保存它,并将文件名返回到图像。我正在使用位图。保存方法,我想我正在清理自己。然而,它只工作一次——如果用户在另一次收到外部异常时调用该例程,并显示一条非常有用的“GDI+中发生了一般错误”消息

它可以一次性保存到目录中(权限似乎不是问题)。而且,如果我更改文件名(比如说,使用一个简单的计数器),它会一直工作——在我看来,只会在临时目录中留下混乱

我读过一些MSDN文章,这些文章让我相信我在文件上留下了一个锁,但“不知道我做错了什么”

代码如下:

Function GetImage()

    Dim tempFile As String = Path.GetTempPath() & "Screen_Log.jpg"

    Me.WindowState = FormWindowState.Normal
    Me.Activate()
    Me.Refresh()

    Dim bmpScreenshot As Bitmap = New Bitmap(Width, Height, PixelFormat.Format32bppArgb)
    Dim gfxScreenshot As Graphics = Graphics.FromImage(bmpScreenshot)

    gfxScreenshot.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, Me.Size, CopyPixelOperation.SourceCopy)

    ' *** Works once, then crashes here.
    bmpScreenshot.Save(tempFile, ImageFormat.Jpeg)

    bmpScreenshot.Dispose()
    gfxScreenshot.Dispose()

    Return tempFile

End Function
有什么建议吗


-Gnerf

位图
可能非常粘稠。试试这个,看看它是否解决了这个问题。尝试不使用GC部分,看看使用的块是否足够-否则添加垃圾收集调用

Function GetImage() As String
 Dim tempFile As String = Path.GetTempPath() & "Screen_Log.jpg"
 Using bmpScreenshot As Bitmap = New Bitmap(Width, Height, PixelFormat.Format32bppArgb)
  Using gfxScreenshot As Graphics = Graphics.FromImage(bmpScreenshot)
   gfxScreenshot.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, Me.Size, CopyPixelOperation.SourceCopy)
   bmpScreenshot.Save(tempFile, ImageFormat.Jpeg)
  End Using
 End Using
 GC.Collect()
 GC.WaitForPendingFinalizers()
 GC.Collect()
 Return tempFile
End Function

因为文件已经存在!否,位图。保存方法覆盖文件。我通过关闭可执行文件(确认.JPG仍然存在)并重新启动来测试它。它覆盖了文件,并且工作了一次,再一次…块足以修复它--这太疯狂了,但是谢谢你!我刚刚加入,所以,显然我不能投票给它答案,但我会尽快。再次感谢你,OFD!