У нас есть немного кода, который делает скриншот во время сообщения об ошибках.Приложение WinForms в .NET 4 Framework и работает на Windows Terminal Server.Приложение используется одновременно через соединение RDP.Код довольно старый и иногда выдает следующую ошибку:
ExternalException: общая ошибка произошла в GDI +.
Stack: WinBase.PrikazIznimke.NapraviScreenShot () WinBase.PrikazIznimke.button1_Click (Отправитель объекта, EventArgs e)
Внутренний стек исключений: System.Drawing.Image.Save (имя файла строки, кодировщик ImageCodecInfo, EncoderParameters encoderParams) WinBase.PrikazIznimke.NapraviScreenShot () Stack: WinBasenkeS.Sign ().WinBase.PrikazIznimke.*
Причины этой ошибки мы так и не поняли, мы исследовали несколько раз без заключения.Сама ошибка встречается редко (возможно, 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;
}
}
Если у вас есть какие-либо идеи о том, что мы могли бы сделать дальше или какие-либо теории, почему произошла ошибка, я был бы признателен.