반응형
서로 다른 Thread 에서 하나의 UI 객체 접근을 하거나 할 때 발생하는 경우
아래와 같은 invoke 함수를 구현하여 처리 할 수 있음.
invoke 함수를 정의 하고 이를 생성한 후 control 의 Invoke 에 전달하여 위와 같은 에러를 회피 할 수 있음.
예) Control 의 Text 속성에 접근할 때
delegate void Ctr_Involk1(Control ctr, string text);
public void setText_Control(Control ctr, string txtValue
{
if (ctr.InvokeRequired)
{
Ctr_Involk1 CI = new Ctr_Involk1(setText_Control);
ctr.Invoke(CI, ctr, txtValue);
}
else
{
ctr.Text = txtValue;
}
}
//사용 처
Ctr_Involk1( lblTest, "바꿀 문장");
예) Control 의 Enabled 속성에 접근 할 때
delegate void Ctr_Involk2(Control ctr, bool val);
public void setEnabled_Control(Control ctr, bool val)
{
if (ctr.InvokeRequired)
{
Ctr_Involk2 CI = new Ctr_Involk2(setEnabled_Control);
ctr.Invoke(CI, ctr, val);
}
else
{
ctr.Enabled = val;
}
}
위 2개의 예제에서 보면 즉 원하는 속성에 접근하여 설정한 인자, 그리고 컨트롤을 인자로 받는 Invoke 함수 선언
그리고 이걸 처리하기 위한 바디
반응형
'Development > Visual C#' 카테고리의 다른 글
[C#] Thread 생성 하기 (0) | 2021.07.16 |
---|---|
[C#] System.InvalidOperationException 에러 (0) | 2021.07.16 |
[C#] 콜백 함수 사용 방법 (call back function) (0) | 2021.07.16 |
[C#] NamedPipe 사용 예제 (0) | 2021.07.09 |
프린터 드라이버 인쇄 하는 방법 C# (0) | 2021.03.22 |
댓글