Ошибка GDI + иногда возникает при создании скриншота - PullRequest
0 голосов
/ 07 июня 2019

У нас есть немного кода, который делает скриншот во время сообщения об ошибках.Приложение 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;
    }
}

Если у вас есть какие-либо идеи о том, что мы могли бы сделать дальше или какие-либо теории, почему произошла ошибка, я был бы признателен.

...