Share via


システム タイマによるコマンド ソースの無効化のサンプル

更新 : 2007 年 11 月

このサンプルでは、Windows.System.Timers.Timer を使用してコマンド ソースを有効および無効にする方法を示します。

Windows.System.Timers.Timer は UI スレッドとは別のスレッドで動作するため、UI を更新するために追加の処理がいくつか必要になります。この問題を解決するためのもう 1 つの方法は、DispatcherTimer を使用するもので、たいていの場合はこの方がより良い洗練された方法です。DispatcherTimer は UI スレッドと同じスレッドで動作するため、この方法の方が簡単です。詳細については、「ディスパッチャのタイマによるコマンド ソースの無効化のサンプル」のサンプルを参照してください。ただし、UI スレッドで実行しないクラスが必要になる場合もあるので、このサンプルではそれを実現する方法を示します。

MenuItem クラス、Button クラスなどのコマンド ソースは、それらが割り当てられている RoutedCommandCanExecuteChanged イベントを待機し、コマンドが現在のコマンド ターゲットで実行できるかどうかをコマンドに照会して確認する必要があるタイミングを特定します。通常、コマンド ソースは、コマンドが実行できない場合は無効になり、コマンドが実行できる場合は有効になります。たとえば、MenuItem は、コマンドが実行できない場合に淡色表示になります。

CommandManager は、コマンド ターゲットの状態が変更されたことを RequerySuggested イベント経由で RoutedCommand に通知します。RoutedCommand は、コマンド ソースが待機している CanExecuteChanged イベントを生成します。通常は、この通知機構で十分ですが、コマンド ターゲットの状態が変更されたことを CommandManager が認識しないために、RequerySuggested イベントが生成されず、コマンド ソースが RoutedCommand に照会しない場合があります。このような状況では、InvalidateRequerySuggested を呼び出すことで、CommandManager に強制的に RequerySuggested イベントを発生させることができます。

このサンプルでは、現在の時刻の秒数がターゲット値を上回っている場合にのみ実行できる RoutedCommand を作成します。1 秒ごとに UI スレッドの Dispatcher にジョブをプッシュする System.Windows.Timers.Timer を作成します。このジョブは 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 ソフトウェア開発キット (SDK) をインストールして、そのビルド環境のコマンド ウィンドウを開きます。[スタート] メニューの [すべてのプログラム]、[Microsoft Windows SDK] の順にポイントし、[CMD シェル] をクリックします。

  • サンプルをハード ディスク ドライブにダウンロードします。通常は、ソフトウェア開発キット (SDK) のドキュメントからダウンロードします。

  • ビルド環境のコマンド ウィンドウからサンプルをビルドするには、サンプルのソース ディレクトリに移動します。コマンド プロンプトで「MSBUILD」と入力します。

  • Microsoft Visual Studio でサンプルをビルドするには、サンプル ソリューションかプロジェクト ファイルを読み込んで、Ctrl キーと Shift キーを押しながら B キーを押します。

サンプルの実行

  • コンパイルしたサンプルをビルド環境のコマンド ウィンドウから実行するには、サンプルのソース コード フォルダの下にある Bin\Debug または Bin\Release フォルダで .exe ファイルを実行します。

  • コンパイルしたサンプルを Visual Studio でデバッグしながら実行するには、F5 キーを押します。

参照

処理手順

ディスパッチャのタイマによるコマンド ソースの無効化のサンプル

概念

コマンド実行の概要