본문 바로가기
Development/Visual C#

[C#] System.InvalidOperationException 에러

by qWooWp 2021. 7. 16.
반응형

서로 다른 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 함수 선언

그리고 이걸 처리하기 위한 바디

 

반응형

댓글