반응형

메인 쓰레드가 아닌 새로운 쓰레드로 폼과 컨트롤들을 제어하려고 하면 크로스 쓰레드 에러가 발생한다.

InvokeRequired로 현재 쓰레드가 메인쓰레드와 충돌이 되는지 확인하고 Invoke()메서드로 대리자를 생성해준다.

 

필자의 경우는 폼을 Hide()메서드를 사용해 잠시 숨겼다가 쓰레드로 Show()메서드를 사용할 때

에러가 발생하여 처리한 경우이다. 닷넷 버전이 올라가면서 this는 안써줘도 됨으로 생략하였다.

 

InvokeRequired는 주로 텍스트 박스같은 컨트롤에도 사용할 수 있다.

텍스트 박스같은 경우는 주로 채팅프로그램에서 쓰레드를 써야할때 쓰므로 아주 유용하다.

ex) if (textbox1.InvokeRequird) textbox1.Invoke(new ...

if (InvokeRequired) //만든 쓰레드가 메인 쓰레드와 충돌할때
{
	Invoke(new MethodInvoker(delegate ()
	{
		Show();
	}));
}

else
{
	Show();
}
반응형

+ Recent posts