Windows 양식 폐쇄 프로세스의 어느 시점에서 컨트롤이 무효화됩니까?

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

  •  19-09-2019
  •  | 
  •  

문제

나는 최근에 일부 학부생들에게 작고 비교적 간단한 C# 라이브러리를 사용해야하는 일부 학부생들을 위해 코스워크를 설정했습니다. 이 라이브러리의 주요 목적은 컬러 그리드 (조작 할 수 있음), 여러 버튼 및 일부 텍스트가있는 레이블로 구성된 간단한 형식을 표시하는 것입니다.

그들이 확장하는 클래스는 그들이 구현 해야하는 여러 가지 추상 방법을 제공하며, 그 중 하나는 업데이트 반응이라고하며 설정 간격으로 자동으로 호출됩니다.

나는 다음과 같은 문제를 직접 만나지 않았지만 실험실에서 일부 학생들은 양식을 닫을 때 업데이트 반응 방법 내에서 간헐적 인 InvalidoperationException을 만났습니다. 오류 메시지는 다른 스레드에서 UI를 시도하고 수정할 때 일반적으로 볼 것으로 예상되는 오류입니다. '' 일반적으로 문제가되는 통제의 이름을 볼 수 있습니다.
이것이 계속 문제가되는 경우, 우리는이 오류가 이미 어떤 식 으로든 그들의 작업의 표시에 영향을 미치지 않을 것이라고 이미 언급했지만 도서관의 고정 된 버전을 그들에게 재발행해야합니다 (코드의 결함이 있기 때문에). .

내가 말할 수있는 한, 학생들은 업데이트가 실행 중이며 업데이트 스레드가 중지되기 전에 수정하는 컨트롤이 폐기되는 컨트롤에서 양식을 닫아야합니다. 즉, 컨트롤이 무효화 된 것으로 보입니다. 이상한 점은 간헐적 인 것이 얼마나 간헐적인가, 일부 학생들은 다른 학생들이 계속해서 문제를 겪지 않았지만 다른 학생들은 계속해서 문제를 겪었습니다. 나는 코스워크를위한 모델 솔루션을 개발하거나 도서관 자체를 개발하는 동안 개인적으로 그것을 경험 한 적이 없습니다.

그래서 내 질문은 수명주기 양식의 시점에 있으며 컨트롤이 폐기되므로 업데이트 스레드를 중지하는 코드를 넣는 것이 가장 좋을까요? 현재이 코드는 양식 Dispose 메소드에 있으며 다른 곳에 더 잘 배치 될까요?

도움이 되었습니까?

해결책

스레드를 어떻게 멈추고 있습니까? 창을 닫기 전에 멈추고 있다고 확신합니까? 스레드 루프에 플래그를 설정하여 중지해야합니다. 그런 다음 스레드가 종료 될 때까지 기다려야합니다.

while (running)
{
    // thread stuff
}

형태

thread.running = false; // or use your own Stop() method that does the same thing
thread.Join();

반응 형 시스템을 원한다면 스톱 신호를 얻는 짧은 시간 내에 스레드가 종료 될 수 있는지 확인해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top