透過系統計時器停用命令來源範例

更新:2007 年 11 月

這個範例顯示如何透過 Windows.System.Timers.Timer 啟用和停用命令來源。

執行 Windows.System.Timers.Timer 的執行緒與 UI 執行緒不同,因此需要額外進行一些工作來更新 UI。另一種解決這個問題的方法,也是在大部分情況下都比較適合也較緩和的方法,是使用 DispatcherTimer。因為執行 DispatcherTimer 的執行緒與 UI 執行緒相同,所以這比較簡單。如需詳細資訊,請參閱透過發送器計時器停用命令來源範例範例。不過,有時您仍需要使用在非 UI 執行緒上執行的類別 (Class),因此這個範例顯示如何完成這項作業。

命令來源 (如 MenuItem 類別 (Class) 和 Button 類別) 會接聽它們所連接之 RoutedCommand 上的 CanExecuteChanged 事件,以判斷它們何時必須查詢命令來得知命令是否可以在目前的命令目標上執行。通常,如果不能執行命令,命令來源會自動停用,如果可以執行命令,命令來源會自動啟用,例如,當命令不能執行時,MenuItem 會變成灰色。

CommandManager 會透過 RequerySuggested 事件將命令目標狀況的變更告知 RoutedCommandRoutedCommand 會引發命令來源正在接聽的 CanExecuteChanged 事件。通常這個告知機制是恰當的,但是在某些情況下,CommandManager 不會知道命令目標的狀況已變更,因此不會引發 RequerySuggested 事件,而命令來源就不會查詢 RoutedCommand。在這些情況下,可以呼叫 InvalidateRequerySuggested 來強制 CommandManager 引發 RequerySuggested 事件。

這個範例會建立只有當目前時間的秒數大於目標值時,才會執行的 RoutedCommand。System.Windows.Timers.Timer 的建立是要每秒將工作推入至 UI 執行緒的 Dispatcher。因為這個工作是排定在 UI 執行緒的 Dispatcher 上,所以 UI 執行緒會自動更新 UI。

推入至 Dispatcher 的方法會呼叫 InvalidateRequerySuggested。這可確保命令來源收到 CanExecuteChanged 事件,這樣它才能呼叫命令的 CanExecute 方法。

如需使用命令的詳細資訊,請參閱命令概觀

這個範例示範 Windows Presentation Foundation 的特定功能,因此並未遵循應用程式開發的最佳做法。如需 Windows Presentation Foundation (WPF) 和 Microsoft .NET Framework 應用程式開發最佳做法的完整內容,請依適當情況參閱下列內容:

協助工具 - 協助工具最佳作法

安全性 - Windows Presentation Foundation 安全性

當地語系化 - WPF 全球化和當地語系化概觀

Download sample

建置範例

  • 安裝 Windows Software Development Kit (SDK),然後開啟 [建置環境命令] 視窗。在 [開始] 功能表中,指向 [所有程式]、[Microsoft Windows SDK],然後按一下 CMD 殼層。

  • 接著,在軟體開發套件 (SDK) 文件處下載軟體,並存至您的硬碟上。

  • 若要組建建置環境命令視窗的範例,您必須先移至範例的來源目錄在命令提示字元中,輸入 MSBUILD。

  • 若要在 Microsoft Visual Studio 中建置範例,請載入範例方案或專案檔,然後按下 CTRL+SHIFT+B。

執行範例

  • 若要在 [建置環境命令視窗] 中執行編譯後的範例,請執行位在包含範例原始程式碼的檔案夾 (Bin\Debug 或 Bin\Release 檔案夾) 下的 .exe 檔案。

  • 若要在 Visual Studio 中執行編譯後的範例並進行偵錯,請按 F5。

請參閱

工作

透過發送器計時器停用命令來源範例

概念

命令概觀