C# & ASP.NET

C# 쓰레드 사용시 크로스 스레드 작업이 잘못되었습니다 컨트롤이 자신이 만들어진 스레드가 아닌....

조심이 2010. 9. 10. 10:33
반응형

C# 윈도우 프로그램에서 쓰레드를 사용하였는데 쓰레드에서 폼의 컨트롤을 사용할 경우

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

에러가 발생한다. 
쓰레드가 컨트롤에 접근할때 무언가 충돌로 인한 에러인듯 하다.

해결하기 위해 예를 들어 라벨 컨트롤이라던지 텍스트 박스 컨트롤을 사용한다 치면
 
먼저 딜리게이트 선언.
delegate void Ctrl_Involk (Control ctrl, string text);

public void setText(Control ctrl, string txtValue)
{


            if (ctrl.InvokeRequired)
            {
                Ctrl_Involk CI= new Ctrl_Involk (setText);
                ctrl.Invoke(CI, ctrl, txtValue);
            }
            else
            {
                ctrl.Text = txtValue;
            }

}

요렇게 해주면 문제를 해결 할 수 있다.

만약 .Text 같은 일반적인 속성을 사용할것이 아니라고 한다면.. 예를 들어 ProgressBar 에 값을 셋팅하려고 한다면
인자에 Control 대신 System.Windows.Forms.ProgressBar int 값으로 넘겨줘서 사용한다. ^^;

반응형