Рисование Winforms - параметр не действителен при возобновлении системы - PullRequest
5 голосов
/ 30 июня 2011

У меня странная проблема, когда мое приложение работает, и система выходит из спящего режима (в Windows 7).

Я вызываю метод Graphics.DrawString, и это работает нормально большую часть времени.За исключением случаев, когда программа работает, и я впадаю в спящий режим системы.Затем, когда я возобновляю, метод DrawString генерирует ArgumentException (параметр недействителен) и дает мне красный крестик, где мой рисунок должен быть.

Что здесь не так?Отлов исключения исключает красный крест, но когда мы попадаем в это состояние, пути назад уже нет, и исключение будет вызываться до перезапуска программы.

Спасибо за любую помощь, Алан

Редактировать: вот код, который не работает:

protected override void OnPaint(PaintEventArgs e)
{
    // Drawing logic succeeds until this point

    e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), new PointF(x, y));
}

На самом деле это подкласс ToolStripLabel.

1 Ответ

2 голосов
/ 01 июля 2011

Многие системные ресурсы становятся недействительными после сна или гибернации. Так что ваш шрифт, вероятно, является недействительным, так как это частая причина таких проблем. Также я отмечаю, что вы не вызываете Dispose на SolidBrush, который вы должны сделать, чтобы предотвратить использование ресурсов. Вот так ...

using(SolidBrush drawBrush = new SolidBrush(ForeColor))
    e.Graphics.DrawString(Text, Font, drawBrush, new PointF(x, y));
...