반응형
C#에서, Form에 구현된 컨트롤을 Form이 아닌 다른 클래스에서 호출하려 하면,
다음과 같은 에러가 발생한다.
크로스 스레드 작업이 잘못되었습니다. 'xxxx' 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다.
C#에서 UI 컨트롤들은, 자신이 만들어진 쓰레드에서만 엑세스될 수 있게 되어 있다.
하지만, 종종 다른 쓰레드에서 엑세스 해야 하는 경우가 있기 마련이다.
이런 경우에는, 컨트롤의 InvokeRequired 속성을 이용하여
대리자 호출을 해야 되는 상황인지를 판단하여
직접호출을 하거나 대리자 호출을 하면 된다.
이에 대한 설명은, 다음 사이트에 잘 나와 있다.
다음은, 실제 사용 샘플이다.
delegate void deleg_log(object content, params object[] args); public void log(object content, params object[] args) { if (InvokeRequired) { deleg_log call = new deleg_log(log); Invoke(call, content, args); } else { if (txtResult.Text.Length > 2000) txtResult.Text = String.Format(content.ToString(), args) + txtResult.Text.Substring(0, 2000); else txtResult.Text = String.Format(content.ToString(), args) + txtResult.Text; } }
반응형
'프로그래밍' 카테고리의 다른 글
볼랜드(Borland) 관련 무료 다운로드 정보 (0) | 2016.12.08 |
---|---|
위키독스 - 온라인 책 제작 공유 플랫폼 (0) | 2016.11.30 |
오래된 소스를 빌드할 때의 _WIN32_WINNT 문제 (0) | 2016.05.11 |
ORACLE에서 UTC(GMT)로의 시간 변환 함수 (0) | 2016.04.29 |
Intel 4rd Quad Core i5-4590 (0) | 2016.02.23 |