我们有一些代码可以在错误报告期间进行屏幕截图。该应用程序是.NET 4框架中的WinForms,可在Windows Terminal Server上运行。该应用程序通过rdp连接同时使用。该代码相当老,有时会出现以下错误:
ExternalException:GDI +中发生了一般错误。
堆栈:WinBase.PrikazIznimke.NapraviScreenShot() WinBase.PrikazIznimke.button1_Click(对象发送方,EventArgs e)
内部异常堆栈:System.Drawing.Image.Save(String filename, ImageCodecInfo编码器,EncoderParameters编码器(Params) WinBase.PrikazIznimke.NapraviScreenShot()堆栈: WinBase.PrikazIznimke.NapraviScreenShot() WinBase.PrikazIznimke.button1_Click(对象发送方,EventArgs e)
内部异常堆栈:System.Drawing.Image.Save(String filename, ImageCodecInfo编码器,EncoderParameters编码器(Params) WinBase.PrikazIznimke.NapraviScreenShot()。
我们从未理解此错误的原因,我们进行了数次调查,但均未得出结论。该错误本身很少遇到(可能占报告总数的1%)。完整的代码是这样的:
private void NapraviScreenShot()
{
try
{
Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(bitmap);
graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);
this.ObrisiScreenShot();
bitmap.Save(Application.UserAppDataPath + @"greska.jpeg", ImageFormat.Jpeg);
}
catch (Exception ex)
{
bool rethrow = ExceptionPolicy.HandleException(ex, "Logiraj i proslijedi");
if (rethrow)
throw;
}
}
private void ObrisiScreenShot()
{
try
{
string put = Application.UserAppDataPath;
if (System.IO.File.Exists(put + @"greska.jpeg") == true)
System.IO.File.Delete(put + @"greska.jpeg");
}
catch (System.IO.IOException)
{
return;
}
catch (Exception ex)
{
bool rethrow = ExceptionPolicy.HandleException(ex, "Logiraj i proslijedi");
if (rethrow)
throw;
}
}
如果您有任何想法,我们下一步可以做什么或任何理论为什么会发生错误,我将不胜感激。