Dot-Net
Dispatcher.CurrentDispatcher 與 Application.Current.Dispatc…
Dispatcher.CurrentDispatcher(inSystem.Windows.Threading) 和Application.Current.Dispatcher(in )有什麼區別System.Windows?我的直覺告訴我,它
Application.Current.Dispatcher永遠不會改變,並且對目前應用程序中的所有執行緒都是全域的,同時可能會根據呼叫它的執行緒Dispatcher.CurrentDispatcher創建一個新實例。Dispatcher那是對的嗎?
如果是,
Dispatcher.CurrentDispatcher主要是為了多執行緒UI的目的嗎?
我的直覺告訴我 Application.Current.Dispatcher 永遠不會改變並且對目前應用程序中的所有執行緒都是全域的,而 Dispatcher.CurrentDispatcher 可能會根據呼叫它的執行緒創建一個新的 Dispatcher 實例。
那是正確的。
Dispatcher.CurrentDispatcher此外,從非 UI 執行緒訪問沒有任何意義。除非您呼叫它,否則它將什麼也不做Dispatcher.Run,並且進入無限消息循環不是您想要從工作執行緒中執行的操作。所以:
- 在最常見的情況下,您的應用程序只有一個 UI 執行緒,
Application.Current.Dispatcher並且Dispatcher.CurrentDispatcher從 UI 執行緒內部將返回相同的實例。您使用哪一個只是偏好問題。- 如果您的應用程序有多個 UI 執行緒,那麼每個執行緒都
DispatcherObject將與在建構時創建的 UI 執行緒的調度程序永久關聯。在這種情況下,Application.Current.Dispatcher將指派生您的應用程序的執行緒的調度程序;您將無法使用它向其他 UI 執行緒擁有的控制項發布消息。