C#/윈폼

C# 윈폼 윈도우 멀티쓰레딩

doridam 2023. 7. 14. 13:35


1. 윈도우 멀티쓰레딩

윈도우 프로그래밍에서 멀티쓰레드를 사용하기 위해서는 Thread 클래스를 사용해 새로운 쓰레드를 만들거나 쓰레드풀/Task, BackgroundWorker Wrapper 클래스를 사용한다.
윈도우 멀티쓰레딩에서 중요한 사항은 UI 컨트롤들을 갱신하기 위해서는 항상 UI 컨트롤을 생성한 UI Thread에서 갱신해야 한다는 것이다.

해당 예제는 멀티쓰레드 구현 방식을 잘못하여 UI컨트롤을 생성한 쓰레드에서 갱신한것이 아닌 다른 쓰레드에서 갱신하여 발생한 예외이다. 

위와 같은 상황에서 사용하는것이 invoke 이다. invoke는 다른 쓰레드에서 UI 컨트롤으로 접근하기 위해서 사용한다. 위 예제에서 사용된 invokeRequired는 현재 쓰레드가 UI 쓰레드인지 확인 후 true or false 를 리턴한다.
InvokeRequired를 사용하여 현재 쓰레드가 UI 쓰레드가 아니라면 Invoke를 사용해서 UI 쓰레드로 작업을 전달한다. 수정 후 문제없이 잘 작동하는것을 확인 했다.