참고하면 좋은 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를 넣을 수 있는데, { } 안에 수행할 동작을 적으면 된다. 당연하게도 메서드처럼 취급되기 때문에 여러 줄을 적을 수도 있다.
'.NET > WinForm' 카테고리의 다른 글
[WinForm] Drag & Drop으로 컨트롤과 컨트롤 간에 개체 옮기기 (0) | 2022.11.13 |
---|---|
[WinForm] Drag & Drop으로 파일 가져오기 (1) | 2021.07.27 |
[WinForm] 마우스 휠로 이미지 확대/축소 (0) | 2021.07.21 |
[WinForm] 텍스트박스 입력 무시/숫자만 입력 가능하도록 하기 (0) | 2021.07.13 |
[WinForm] 크로스 스레드(Cross Thread) 문제 해결 (0) | 2021.07.13 |