Wie die ObjectDisposedException in C # verhindern, bei der Erstellung und Anwendung beendet

StackOverflow https://stackoverflow.com/questions/90662

  •  01-07-2019
  •  | 
  •  

Frage

Ich bin ein CompSci Student, und ziemlich neu in C #, und ich tat ein „Josephus Problem“ Programm für eine Klasse, und ich erstellt eine Exit-Taste, die Application.Exit () ruft jederzeit zu beenden, aber wenn C # arbeitet noch an der Malerei und die Taste gedrückt wird es eine ObjectDisposedExeception für das Graphics-Objekt wirft. Gibt es eine Möglichkeit, dies zu verhindern ?. Ich war der Versuch zu denken {} fangen oder einen Booleschen ändern den Malprozess zu sagen, vor dem Verlassen zu stoppen, aber ich möchte wissen, ob es eine andere Lösung ist.

War es hilfreich?

Lösung

Es sollte nicht möglich sein, damit dies geschehen kann. Wenn die Taste auf dem gleichen Thread wie das Fenster erstellt wird, teilen sie eine Nachricht Pumpe und der Lack-Handler nicht unterbrochen werden kann, die Exit-Taste zu handhaben. Die Nachricht, die die Taste, bis der Lack-Handler kehrt geklickt wurde auf die Threads Nachrichtenwarteschlange wird die Warteschlange gestellt werden.

Im Allgemeinen sollten Sie Malerei auf die Paint-Handler (oder außer Kraft setzen OnPaint) und überall sonst verschieben, dass Sie den Bildschirm aktualisieren müssen, rufen Sie die Invalidate-Methode der Kontrolle. Das teilt Windows mit, dass ein Bereich muss neu zu streichen und, wenn alle anderen Nachrichten behandelt worden sind, wird es eine WM_PAINT Nachricht erzeugen, die letztlich OnPaint rufen, was wiederum das Paint-Ereignis ausgelöst.

Wenn Animieren, verwenden Sie einen System.Windows.Forms.Timer jeden Rahmen auszulösen, anstatt einen Faden. System.Threading.Timer Rückrufe ausführen auf dem Threadpool, so dass sie immer auf dem falschen Thread für die Benutzeroberfläche zu manipulieren.

Andere Tipps

Sie sollten die Close () Methode des Formulars aufgerufen werden, das die Schaltfläche enthält, um die Form in geordneter Weise zu schließen. das Hauptformular schließen, wird die Anwendung zu verlassen für Sie ohnehin verursachen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top