Dispatcher
을 사용할시기와 SynchronizationContext
클래스를 사용하는시기를 말해 줄 수 있습니까?Dispatcher 및 SynchronizationContext 클래스
잠시 동안 Dispatcher
을 사용하여 백그라운드 스레드의 작업을 큐에 넣은 다음 SynchronizationContext
을 발견했습니다. WPF 사용시
Dispatcher
을 사용할시기와 SynchronizationContext
클래스를 사용하는시기를 말해 줄 수 있습니까?Dispatcher 및 SynchronizationContext 클래스
잠시 동안 Dispatcher
을 사용하여 백그라운드 스레드의 작업을 큐에 넣은 다음 SynchronizationContext
을 발견했습니다. WPF 사용시
AFAIK는, 상기 오브젝트 SynchronizationContext.Current
실제로 디스패처 오브젝트 주위 단지 래퍼와 Post
Send
및 방법은 단지 Dispatcher.BeginInvoke
및 Dispatcher.Invoke
위임이다 DispatcherSynchronizationContext
형이다.
그래도 SynchronizationContext
을 사용하기로 결정한 경우에도 배후에서 배정 담당자를 호출하게 될 것입니다.
게다가 UI에 호출해야하는 모든 스레드에 대한 현재 컨텍스트에 대한 참조를 전달해야하므로 SynchronizationContext를 사용하는 것이 약간 번거롭다 고 생각합니다.
코드가 WPF와 밀접하게 결합 된 경우 Dispatcher를 사용하십시오.
'컨텍스트'스레드에 항목을 대기시켜야 할 때 AsyncOperationManager를 사용하십시오. 이것은 Windows Forms, ASP .NET 및 WCF 응용 프로그램에서도 작동합니다.
직접 SynchronizationContext를 사용하지 마십시오. AsyncOperationManager는이 방법을 내부적으로 사용합니다.
나는 당신이이 대답을 얼마 전에 작성했다는 것을 알고 있습니다. 그럼에도 불구하고 "AsyncOperationManager"를 사용하여 "컨텍스트"(UI) 스레드에서 실행을 위해 델리게이트를 대기시키는 방법을 구체적인 예제로 제공 할 수 있다면 매우 흥미가있을 것입니다. 나는'SynchronizationContext'가 어떻게 작동 하는지를 안다; 하지만 'AsyncOperation'이 어떻게 작동하는지 생각할 수 없습니다. (저는 현재 비동기 작업의 상태와 진행 상황을 추적하는 "토큰"과 비슷하지만 실제로 대리자의 실행을 예약하는 데 도움이되지 않는다는 개념을 가지고 있습니다.) – stakx
AsyncOperationManager 사용 방법 : http : // www .codeproject.com/KB/cpp/SyncContextTutorial.aspx – jbe
UI 스레드에서 동기식 실행이 필요한 경우 어떻게해야합니까? AsyncOperation에는 Send() 메서드가 없지만 SynchronizationContext에는 있습니다. – Monstieur
왜 downvote입니까? –