.NET/WinForm
[WinForm] Invoke() delegate 생성 없이 한 문장으로 간단하게 사용하기
Dv Jm
2021. 8. 12. 14:23
참고하면 좋은 C# Solution의 다른 글
[C#] delegate와 delegate 체인
delegate(델리게이트)는 C++의 함수 포인터와 비슷한 기능을 하는 C#의 기능으로, '대리자'라는 의미처럼 메서드를 대신 호출해주는 기능을 한다. 메서드를 대신 호출해주는 기능이 왜 필요할까? 사
cs-solution.tistory.com
[WinForm] 크로스 스레드(Cross Thread) 문제 해결
WinForm에서 Thread를 사용해 폼의 컨트롤을 갱신하려고 시도하면 크로스 스레드 예외가 발생한다. 이는 컨트롤을 생성해 관리하는 스레드는 메인 스레드인데, 사용자가 생성한 외부 스레드에서 메
cs-solution.tistory.com
Thread에서 Form에 있는 Control의 값을 변경하려고 시도하게 되면 크로스 스레드 예외가 발생한다.
해결 방법은 delegate와 Invoke를 사용하는 것이었다.
그러나 이 방법은 delegate를 수행해야 하는 동작마다 생성해서 사용해야 하는 번거로움이 있다.
별도의 delegate를 생성하지 않고 하나의 문장으로 처리하는 방법을 소개한다.
void setText(string text)
{
Invoke(new Action(delegate()
{
textBox1.Text = text;
}
}
위와 같이 Action 클래스의 생성자에 일회성 delegate를 넣을 수 있는데, { } 안에 수행할 동작을 적으면 된다. 당연하게도 메서드처럼 취급되기 때문에 여러 줄을 적을 수도 있다.