본문 바로가기

.NET/WinForm

[WinForm] Invoke() delegate 생성 없이 한 문장으로 간단하게 사용하기

참고하면 좋은 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를 넣을 수 있는데, { } 안에 수행할 동작을 적으면 된다. 당연하게도 메서드처럼 취급되기 때문에 여러 줄을 적을 수도 있다.