코드 스 니펫은 (ThreadStart) 대리자 형식을 사용하기 때문에 오도 된 것입니다. 중요한 것은 모든 STA 스레드 환경에서 정확히 하나의 스레드가 "UI"스레드라는 점입니다. 모든 UI 객체는 해당 스레드에서 생성되고 상호 작용되어야합니다.
Dispatcher는 몇 가지 용도로 사용되므로 가장 쉽게 이해할 수있는 사용법은 백그라운드 스레드에서 사용하여 UI 스레드로 다시 호출하는 것입니다. 그래서 거기에 넣는 것은 정확히 "스레드 안전"이 아니지만 UI 스레드에서 호출되도록 보장됩니다. UI 스레드에 모든 것을 넣으면 동시에 호출되는 것이 아니라 차례로 호출됩니다.
BeginInvoke는 Invoke가 동기 호출 인 동안 UI 스레드 큐에 대리자를 넣는 비동기 호출입니다. 정말로 놀라운 점은 차단할 UI 스레드에서 실제로 Invoke를 호출 할 수 있고 대리인을 대기열에 넣고 대기열의 다음 항목으로 이동하여 결국에는 호출 한 항목을 호출한다는 것입니다.
Dispatcher는 실제로 우선 순위 대기열이라는 점을 명심해야합니다. 따라서 선입 선출의 의미에서 순수한 대기열이 아닙니다. 왜냐하면 여러분이 대기열에 삽입 된 곳이 우선 순위에 기반을두고 있기 때문에 호출 된 메소드가 결코 실행되지 않는 충분한 것들이 대기열에 끼어들 가능성이 완전히 있기 때문입니다 .
위임자와 그 함수가 호출하는 것은'BeginInvoke'를 통해서만 호출된다는 것이 정확해야한다고 생각합니다. –