Я студент CompSci и довольно новичок в C#, и я делал программу «Проблема Иосифа» для класса, и я создал кнопку Exit, которая вызывает Application.Exit () для выхода в любое время, но если C# все еще работая над рисованием и нажимая кнопку, он выдает исключение ObjectDisposedExeception для объекта Graphics. Есть ли способ предотвратить это? Я думал попробовать {} поймать или изменить логическое значение, чтобы остановить процесс рисования перед выходом, но я хочу знать, есть ли другое решение.





Вы должны вызвать метод Close () формы, содержащей кнопку, чтобы закрыть форму упорядоченным образом. Закрытие основной формы все равно приведет к закрытию приложения.
Этого не должно быть. Если кнопка создается в том же потоке, что и окно, они совместно используют насос сообщений, и обработчик Paint не может быть прерван для обработки кнопки выхода. Сообщение о нажатии кнопки будет помещено в очередь сообщений потока до тех пор, пока обработчик Paint не вернется.
Как правило, вы должны отложить рисование до обработчика Paint (или переопределить OnPaint), а везде, где вам нужно обновить экран, вызовите метод Invalidate элемента управления. Это сообщает Windows, что область требует перекраски, и после обработки всех других сообщений она генерирует сообщение WM_PAINT, которое в конечном итоге вызывает OnPaint, который, в свою очередь, запускает событие Paint.
При анимации используйте System.Windows.Forms.Timer для запуска каждого кадра, а не поток. Обратные вызовы System.Threading.Timer выполняются в пуле потоков, поэтому они всегда находятся в неправильном потоке для управления пользовательским интерфейсом.