-
Invoke, BeginInvoke, 크로스 스레드 예외C# 2022. 1. 24. 16:36반응형
[Invoke]
- 스레드를 따로 분리하지 않고 시간이 오래 걸리는 계산을 진행하면
그동안 UI 핸들링을 담당하는 MainThread가
UI 컨트롤을 핸들링 하지 못하기 때문에, 계산하는 동안 UI가 멈추고,
제어가 불가능 하며 응답 없음을 출력할 때도 있다.
- 이를 해결하기위해 thread 사용하게 되는데 코딩하여 실행하면 관련 Exception을 보게 된다.
- 메인 스레드가 아닌 다른 스레드에서 ui 컨트롤에 접근하려고 하기 때문이다.
- 이 때 invoke 를 사용하여 실행하려고 하는 메소드의 대리자(delegate)를 실행시키면 해결할 수 있다.
-> Control의 Invoke는 다른 스레드에서 직접 접근할 수 없는 윈폼 컨트롤 작업에 대해 Invoke를 통해 작업 자체를 대리자(delegate)로 위임하여 MainThread가 해당 작업을 실행하게 한다.
Invoke와 BeginInvoke
-> Invoke의 경우, 컨트롤을 생성한 스레드에서 동기식으로 실행하고, BeginInvoke는 비동기식으로 실행합니다.
300x250'C#' 카테고리의 다른 글
C# - RichTextBox 자동 스크롤 하기 (0) 2022.02.22 Visual Studio: Warning IDE0006 Error encountered while loading the project 경고 해결 (0) 2022.02.11 C# - CancellationToken (0) 2022.01.24 Task와 async, await 비교/관계 (0) 2022.01.24 c# Error - NullReferenceException (0) 2022.01.24