카테고리 없음

DevExpress(winform) - Cross Thread Error

수박 서리 2024. 4. 24. 09:44

WinForm 동작 중에 control를 수정하려고 하면 아래와 같은 에러가 발생했다. 

 

발생원인) 
구글링을 통해 아래와 같읕 이유로 에러가 발생한다고 한다.

 

폼 구동 시 실행되는 하나의 쓰레드에서 Winform 컨트롤을 관리하게 되는데 해당 특정 스레드가 관리하고 있는 컨트롤을 다른 스레드가 액세스하였을 때 발생한다.

다시 말하면 winform 컨트롤을 생성한 스레드가 아닌 다른 스레드가 속성을 바꾸는 작업을 요청했을 때 크로스 스레드 예외가 발생하는 것이다.

 

근데, 크로스 스레드는 특이한게 Debug모드에서만 실행되고 Release모드에서는 실행이 안된다고 한다.

그 이유를 찾아봤는데 Release모드는 옵션값이 Default로 checkForIllegalCrossThreadCalls = false;가 되어있어서 그렇고 해당 값을 true로 바꾸면 Release모드에서도 오류를 발생시킬 수 잇다고 한다.

 

출처: https://jeongkyun-it.tistory.com/59 [나의 과거일지:티스토리]

 

해결방안) InvokeRequired

 if (InvokeRequired)
   {
       this.Invoke(new Delegate());
   }
 }

위오 같은 식으로 InvokeRequired조건문을 추가해주고 델리게이트를 Invoke해주자