검색결과 리스트
글
프로그램/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 |
RECENT COMMENT