本文件已封存並已停止維護。

Dispatcher 類別

更新: 2008 年 7 月

提供管理執行緒之工作項目佇列的服務。

命名空間:  System.Windows.Threading
組件:  WindowsBase (在 WindowsBase.dll 中)

public sealed class Dispatcher
public final class Dispatcher
public final class Dispatcher
您不能直接在 XAML 中建立這個類別的執行個體。

Dispatcher 為指定的執行緒維護設定優先權的工作項目佇列。

當在執行緒上建立 Dispatcher 時,其會成為唯一與執行緒關聯的 Dispatcher,即使 Dispatcher 已關閉也一樣。

如果嘗試取得目前執行緒的 CurrentDispatcher 和未與執行緒關聯的 Dispatcher,將會建立 Dispatcher

如果 Dispatcher 已關閉,就無法再重新啟動。

在 WPF 中,DispatcherObject 只能由與其關聯的 Dispatcher 進行存取。例如,背景執行緒無法更新與 UI 執行緒上之 Dispatcher 關聯的 Button 的內容。若要讓背景執行緒存取 ButtonContent 屬性,背景執行緒必須將工作委派給與 UI 執行緒關聯的 Dispatcher。這可以使用 InvokeBeginInvoke 完成。Invoke 為同步,而 BeginInvoke 則為非同步。這個作業會以指定的 DispatcherPriority,加入至 Dispatcher 的佇列。

如果在已關閉的 Dispatcher 上呼叫 BeginInvoke,傳回之 DispatcherOperation 的狀態屬性便會設定為 Aborted

Dispatcher 上的所有方法 (DisableProcessing 除外) 是不受執行緒限制的。

DispatcherObject 衍生的物件有執行緒相似性。

Freezable 衍生的物件在凍結時是不受執行緒限制的。如需詳細資訊,請參閱Freezable 物件概觀

在下列範例中,會說明如何將作業置於 Dispatcher 上。如需範例的完整原始程式碼,請參閱單一執行緒應用程式與長期執行的計算範例

首先,會建立一個不接受引數的委派。

public delegate void NextPrimeDelegate();


接著,會呼叫 BeginInvoke(DispatcherPriority, Delegate)。這個對 BeginInvoke(DispatcherPriority, Delegate) 的呼叫採用兩個參數:設定為 DispatcherPriority.Normal 的優先權,以及透過委派 NextPrimeDelegate 的執行個體傳遞的回呼 (Callback)。

startStopButton.Dispatcher.BeginInvoke(
    DispatcherPriority.Normal,
    new NextPrimeDelegate(CheckNextNumber));


System.Object
  System.Windows.Threading.Dispatcher

這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。並非所有的執行個體成員都是安全執行緒。

Windows Vista

.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱.NET Framework 系統需求

.NET Framework

支援版本:3.5、3.0
顯示: