반응형
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 값으로 넘겨줘서 사용한다. ^^;
반응형
'C# & ASP.NET' 카테고리의 다른 글
C# Serial Port에서 GPS 데이터 읽기 (RS-232 Serial COM Port 사용 GPS 수신처리- NMEA 'GPGGA' 메세지) (4) | 2010.12.06 |
---|---|
C# DataTable 그룹핑 하기 - 프로그램에서 DataTable 를 group by 하기 (2) | 2010.12.06 |
한글 파라메터 깨질때.. 자바스크립트에서 넘긴 한글 파라메터 깨지지 않고 받기 (0) | 2010.01.06 |
ASP.NET (C#) 웹싸이트 게시후 모호한 일치가 있습니다 라는 에러 메세지가 나올때... (2) | 2009.12.17 |
C# & ASP.NET 두 날짜 차이가 몇일 인지 구하기 (0) | 2009.11.17 |