programing

발송인.현재 디스패처 대어플.현재의.파견자

padding 2023. 4. 28. 20:20
반응형

발송인.현재 디스패처 대어플.현재의.파견자

사이의 차이점은 무엇입니까?Dispatcher.CurrentDispatcher(에)System.Windows.Threading) 및Application.Current.Dispatcher(에)System.Windows)?

내 직감으로는Application.Current.Dispatcher변경되지 않으며 현재 응용 프로그램의 모든 스레드에 대해 글로벌합니다.Dispatcher.CurrentDispatcher의 새 인스턴스를 생성할 수 있습니다.Dispatcher호출된 스레드에 따라 다릅니다.

그것이 맞습니까?

만약 그렇다면, 그것의 목적은?Dispatcher.CurrentDispatcher주로 멀티스레드 UI용입니까?

내 직감은 그 애플리케이션을 말해줍니다.현재의.디스패처는 변경되지 않으며 현재 응용프로그램의 모든 스레드에 대해 전역적입니다.CurrentDispatcher는 호출된 스레드에 따라 Dispatcher의 새 인스턴스를 만들 수 있습니다.

그것이 맞아요.

게다가, 에 액세스하는 것은 아무런 의미가 없습니다.Dispatcher.CurrentDispatcher사용자 인터페이스가 아닌 스레드에서.호출하지 않으면 아무 것도 할 수 없으며 무한 메시지 루프에 들어가는 것은 작업자 스레드 내에서 원하는 것이 아닙니다.

그래서:

  • 에 UI 스레드가 하나만 있는 가장 일반적인 시나리오에서는Application.Current.Dispatcher그리고.Dispatcher.CurrentDispatcherUI 스레드 내에서 동일한 인스턴스를 반환합니다.어떤 것을 사용하는지는 단순히 선호도의 문제입니다.

  • 앱에 두 개 이상의 UI 스레드가 있는 경우 각 스레드는 구성 시 생성된 UI 스레드의 디스패처와 영구적으로 연결됩니다.이 경우에는,Application.Current.Dispatcher응용 프로그램이 생성한 스레드의 디스패처를 참조합니다. 이를 사용하여 다른 UI 스레드가 소유한 컨트롤에 메시지를 게시할 수 없습니다.

간단히 말하면...

Dispatcher.CurrentDispatcher현재 스레드에 대한 디스패처를 가져옵니다.따라서 백그라운드 프로세스에서 UI 스레드의 Dispatcher를 찾는 경우에는 이 기능을 사용하지 마십시오.

Application.Current.DispatcherUI 스레드의 디스패처는 유일한 응용 프로그램 인스턴스를 회전시키는 스레드이기 때문에 항상 제공됩니다.

내 직감은 그 애플리케이션을 말해줍니다.현재의.디스패처는 변경되지 않으며 현재 응용프로그램의 모든 스레드에 대해 전역적입니다.CurrentDispatcher는 호출된 스레드에 따라 Dispatcher의 새 인스턴스를 만들 수 있습니다.

맞아요, 그.Application.Current.Dispatcher현재 스레드의 디스패처로 구성될 때 할당되는 응용 프로그램의 인스턴스 속성입니다.그리고 다음의 문서로서.Dispatcher.CurrentDispatcher지적 사항:

현재 실행 중인 스레드에 대한 디스패처를 가져오고 새 디스패처가 스레드와 아직 연결되지 않은 경우 새 디스패처를 만듭니다.


만약 그렇다면, 디스패처의 목적입니다.멀티스레드 UI를 위한 현재 디스패처는 주로 무엇입니까?

일반적으로 백그라운드 스레드의 디스패처에 속한 UI 요소가 없기 때문에 작업을 디스패처할 수 없습니다.

언급URL : https://stackoverflow.com/questions/10448987/dispatcher-currentdispatcher-vs-application-current-dispatcher

반응형