Ich arbeite an einem Projekt, bei dem die Steuerung aktualisiert und ein neues Bild alle 10 Sekunden in einem Fenster gezeichnet wird. Der folgende Code löscht diesen Bereich zuerst. Dann wird eine Grenze gezogen.So verhindern Sie ExternalException, die auf Grafikobjekt auftritt
private void DrawRectangle(Color color)
{
using (var graphics = CreateGraphics())
using (var pen = new Pen(color))
{
graphics.Clear(Color.Black); //External exception is thrown here.
graphics.DrawRectangle(pen, 0, 0, Size.Width - 1, Size.Height - 1);
}
}
Normalerweise alles funktioniert gut, aber wenn ich sperren Fenster (drücken Sie Win + L) dann nach 10 Sekunden, wenn graphics.Clear(Color.Black)
Anweisung ausgeführt wird, Anwendung abstürzt.
Gemäß MSDN page: Die Clear-Methode löscht den Status des Grafikobjekts und sollte nicht aufgerufen werden, wenn das Grafikobjekt nicht aktualisiert werden kann. Wenn beispielsweise die Clear-Methode auf einem sicheren Desktop in einer Terminalserversitzung aufgerufen wird, kann eine ExternalException auftreten, wodurch das Graphics-Objekt inkonsistent bleibt.
Was soll ich tun, um diesen Absturz zu verhindern? Soll ich überprüfen, ob Windows gesperrt ist oder nicht? und wird das der einzige Fall sein, in dem dieser Unfall auftreten wird?
Update: Das gleiche Problem tritt auf, wenn der Bildschirmschoner aktiviert ist.
Können Sie überprüfen, ob dies auch passiert, wenn Sie Ihre Anwendung minimieren oder ein anderes Fenster über Ihre Anwendung hängen? Wenn der Bildschirm nicht den Bildschirm auf der Vorderseite zeigt, wird das Grafikobjekt zerstört, denke ich. Aktualisieren Sie Ihre Frage mit dem Lebenszyklus von Grafiken. – Glubus
Nein. Dies geschieht nicht, wenn die Anwendung minimiert wird. Nach Ablauf des Timers wird jedoch ein weiteres Panel angezeigt, und dieser Absturz erfolgt auf dem neuen Panel. Vielleicht ist das nützlich .. –
Sie sprechen über einen Timer, und das alle 10 Sekunden, die Sie etwas tun. Können Sie uns diesen Code zur Verfügung stellen? Es scheint, als ob das Problem dort liegt. – Glubus