2008-09-18 4 views
1

저는 CompSci 학생이며 C#에서 상당히 새로워졌으며 클래스에 대해 "Josephus Problem"프로그램을 수행하고 있었고 Exit 단추를 만들었습니다 언제든지 종료하려면 Application.Exit()을 호출하지만 C#이 여전히 페인팅에 대해 작업 중이며 버튼을 누르면 Graphics 객체에 대해 ObjectDisposedExeception이 발생합니다. 이것을 막을 수있는 방법이 있습니까? try {} catch를 생각하거나 부울을 변경하여 페인팅 프로세스가 종료되기 전에 중단하도록 지시하지만 다른 해결책이 있는지 알고 싶습니다.그리기 및 응용 프로그램이 종료 될 때 C#에서 ObjectDisposedException을 방지하는 방법

답변

1

이렇게해서는 안됩니다. 윈도우와 같은 thread로 버튼을 작성하면 (자), 메세지 펌프를 공유해, 종료 버튼을 처리하기 위해서 페인트 핸들러를 인터럽트 할 수 없습니다. 버튼이 클릭되었다는 메시지는 Paint 핸들러가 반환 할 때까지 스레드의 메시지 대기열에 대기합니다.

일반적으로 페인트를 Paint 핸들러 (또는 OnPaint를 재정의)로 연기하고 화면을 업데이트해야하는 모든 곳에서 컨트롤의 Invalidate 메서드를 호출해야합니다. 즉, 영역을 다시 그리는 것이 필요하고 다른 모든 메시지가 처리되면 WM_PAINT 메시지가 생성되어 궁극적으로 OnPaint가 호출되어 Paint 이벤트가 실행됩니다.

애니메이션을 사용하는 경우 스레드를 사용하는 대신 각 프레임을 트리거하려면 System.Windows.Forms.Timer을 사용하십시오. System.Threading.Timer 콜백은 스레드 풀에서 실행되므로 항상 UI를 조작하기 위해 잘못된 스레드에 있습니다.

2

양식을 순서대로 닫으려면 단추가 들어있는 Form의 Close() 메서드라고해야합니다. 메인 폼을 닫으면 어쨌든 응용 프로그램이 종료됩니다.

관련 문제