카테고리:

최대 1 분 소요

문제 상황

C#으로 멀티 스레드 프로그래밍을 하다보면, 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스하는 경우에 아래와 같은 메시지를 출력한다.

크로스 스레드 작업이 잘못되었습니다. 컨트롤이 자신이 만들어진 스레드가 아닌 다른 스레드에서 액세스되었습니다.

이럴 때는 Invoke함수를 사용하여 컨트롤이 자신이 만들어진 스레드 아닌 스레드에서의 함수 호출을 위임한다.

소스 코드

아래의 텍스트박스의 텍스트를 바꾸는 예제이다.

private void InvokeAccess(TextBox textBox, string data) {
    if (textBox.InvokeRequired) {
        textBox.Invoke((MethodInvoker) delegate { textBox.Text = data; });
    } else {
        textBox.Text = data;
    }
}

태그: Cross-thread, delegate, Invoke, MethodInvoker, Valid, 스레드, 쓰레드, 컨트롤, 크로스 스레드

업데이트: