delegate (3) 썸네일형 리스트형 [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의 값을 변경하려.. [C#] delegate와 delegate 체인 delegate(델리게이트)는 C++의 함수 포인터와 비슷한 기능을 하는 C#의 기능으로, '대리자'라는 의미처럼 메서드를 대신 호출해주는 기능을 한다. 메서드를 대신 호출해주는 기능이 왜 필요할까? 사실 알게 모르게 여기저기에서 우리는 delegate를 사용하고 있다. 가장 대표적인 곳이 WinForm에서 이벤트 처리기이다. 이는 WinForm 애플리케이션이 동작하는 중에 이벤트가 발생하는 각 포인트에서 적절한 대리자를 사용하여 대리자에 등록된 메서드를 호출해주는 것을 의미하며, 각 이벤트에 대한 세부적인 처리를 정의하는 것은 공백으로 남겨두어 WinForm 개발자들이 자유롭게 사용할 수 있도록 한다. 가령 TextBox와 같은 컨트롤들은 키가 입력됨을 판단하여 적절한 위치에서 KeyDown, KeyP.. [WinForm] 크로스 스레드(Cross Thread) 문제 해결 WinForm에서 Thread를 사용해 폼의 컨트롤을 갱신하려고 시도하면 크로스 스레드 예외가 발생한다. 이는 컨트롤을 생성해 관리하는 스레드는 메인 스레드인데, 사용자가 생성한 외부 스레드에서 메인 스레드의 자원을 수정하려고 시도했기 때문에 발생하는 예외이다. 가장 쉬운 해결 방법은 스레드 대신 Timer를 사용하는 것이다. 타이머는 메인 스레드 내에서 돌아가는 비동기 실행기이기 때문에 크로스 스레드 예외가 발생하지 않는다. 그러나 이 방법은 비동기 처리 방법을 타이머 하나로 제한하므로 완벽한 해결 방법이라고 볼 수 없다. 단지 스레드보다 관리하기도 쉽고 크로스 스레드 예외를 발생시키지 않는 한 가지 해결 방법일 뿐이다. 크로스 스레드의 정석적인 해결 방법은 Invoke() 메서드를 사용하는 것이다. .. 이전 1 다음