2014-10-23 12 views
0

질문과 마찬가지로 : 백그라운드 스레드에서 호출 될 때 Application.DoEvents()는 무엇을합니까?백그라운드 스레드에서 Application.DoEvents()를 호출하면 어떤 영향이 있습니까?

일부 컨텍스트를 제공하기 위해 C#의 .NET CF 용으로 작성된 다소 복잡한 솔루션을 검토하고 있습니다. 내가 그것을 검토하고있는 이유는 그것이 내가 조사하도록 요청 받았던 몇 가지 내재적 인 문제들을 가지고 있기 때문이다.

흥미로운 한 가지 재미있는 사실은 앱이 시작될 때 시간 초과 루프에 들어가는 장기 실행 백그라운드 스레드를 생성한다는 것입니다. 각 루프 반복에서 Application.DoEvents()를 호출합니다.

나는이 효과가 무엇인지 알 수 없다. 응용 프로그램의 메인 스레드에서 메시지 대기열을 비우는가? 또는 백그라운드 스레드가 플러시 할 큐를 가지고 있지 않더라도 호출 된 스레드의 메시지 큐를 플러시합니다.

설명되지 않은 응용 프로그램 동작의 원인은 거의 확실합니다.

+0

[이 SO 게시물] (http://stackoverflow.com/questions/6267001/does-doevents-effect-only-the-current-thread)의 대답이 귀하의 질문을 해결합니다. – dotNET

답변

4

Application.DoEvents()는 현재 메시지 대기열에있는 모든 Windows 메시지를 처리합니다.이 메시지는 창을 만든 스레드 당 하나입니다. 따라서 "백그라운드 스레드"에서 호출하면, 스레드에서 윈도우를 생성하지 않으면 아무 작업도 수행하지 않습니다.