프로그램/C# 2013. 3. 19. 22:54

크로스 스레드 해결법

출처: http://ksh6438.blog.me/20168654516

네이버 와 여기 작성자 동일

 

C#으로 개발하면서 스레드를 사용해야 할 상황이 있는데

 

InvalidOperationException 크로스 스레드 작업이 잘못되었습니다.

 

컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다.

 

스레드에서 폼에 있는 예를들면 textbox.txt = "ABC";로 수정하는경우 위와 같은 에러가 발생한다.

 

해당 에러를 무시해도 된다고 생각하면 CheckForIllegalCrossThreadCalls = false;

 

 구문을 삽입하면 해당에러는 무시된다.

 

하지만 컨트롤 상태를 조작하는 스레드가 2개 이상 존재하는 경우 경합, 교착 상태 등의

 

스레드 관련 버그가 발생할 수 있어서 delegate를 활용해 invoke처리해야 한다.

#region label2

delegate void DsetLabel(string data);




private void SetLabel2(string data)

{

            if (label2.InvokeRequired)

            {

                DsetLabel call = new DsetLabel(SetLabel2);

                this.Invoke(call, data);

            }

            else

                label2.Text = data;

}

#endregion

위와 같이 코드를 작성하고 SetLabel2("종료"); 와 같은 형식으로 스레드 내에서 호출하면 크로스 스레드 관련 에러가 발생하지 않는다.

'프로그램 > C#' 카테고리의 다른 글

C# 윈도우7 관리자 권한 얻기  (0) 2013.03.25
C# 리스트뷰 체크된 아이템 얻기  (0) 2013.03.25
C# 화면 캡쳐  (0) 2013.03.12
C# MDI 폼안에 폼 띵우기  (0) 2013.03.12
C# 폼 투명하게 하기  (0) 2013.03.12