ワークフロー デザイナーでアクティビティ デリゲートを定義および使用する方法
.NET Framework 4.5 RC には、すぐに使用できる InvokeDelegate アクティビティの新しいデザイナーが含まれています。このデザイナーは、ActivityAction や ActivityFunc<TResult> など、ActivityDelegate から派生するアクティビティにデリゲートを割り当てるために使用できます。
アクティビティ デリゲートを定義する
Visual Studio で、[ファイル]、[新規作成]、[プロジェクト] の順にクリックします。左の [ワークフロー] ノードと右の [ワークフロー コンソール アプリケーション] テンプレートをクリックします。プロジェクトに名前を付け (必要な場合)、[OK] をクリックします。
ソリューション エクスプローラーでプロジェクトを右クリックし、[追加]、[新しい項目] をクリックします。左の [ワークフロー] ノードと右の [アクティビティ] テンプレートをクリックします。新しいアクティビティに「MyForEach.xaml」という名前を付け、[OK] をクリックします。アクティビティによってワークフロー デザイナーが開きます。
ワークフロー デザイナーで [引数] タブをクリックします。
[引数の作成] をクリックします。新しい引数に「Items」という名前を付けます。
[引数の型] 列で [配列: [T]] をクリックします。
型ブラウザーで [オブジェクト] をクリックします。[OK] をクリックします。
[引数の作成] を再度クリックします。新しい引数に「Body」という名前を付けます。新しい引数の [方向] 列で [プロパティ] をクリックします。
[引数の型] 列で [型の参照] をクリックします。
型ブラウザーで型名フィールドに「ActivityAction」と入力します。ツリー ビューで [ActivityAction<T>] をクリックします。表示されるドロップダウンで [オブジェクト] をクリックし、ActivityAction<Object> 型を引数に割り当てます。
While アクティビティを、ツールボックスの [制御フロー] セクションからデザイナー画面にドラッグします。
While アクティビティを選択し、[変数] タブをクリックします。
[変数の作成] をクリックします。新しい変数に「Index」という名前を付けます。
[変数の型] 列で [Int32] をクリックします。[スコープ] を [While]、[既定] 列を空欄のままにします。
While アクティビティの条件プロパティの値を index < Items.Length; に設定します。
InvokeDelegate アクティビティを、ツールボックスの [プリミティブ] セクションから While アクティビティの [本文] にドラッグします。
デリゲート ドロップダウン リストで [本文] をクリックします。
InvokeDelegate アクティビティの [プロパティ] グリッドで、デリゲートの引数プロパティの [...] をクリックします。
「Argument」という引数の [値] 列に「Items[Index]」と入力します。[OK] をクリックして [デリゲートの引数] ダイアログ ボックスを閉じます。
Assign アクティビティを InvokeDelegate アクティビティの下の水平線にドラッグします。Assign アクティビティが作成されます。MyForEach アクティビティの [本文] セクションの 2 つのアクティビティを含むように、Sequence アクティビティが自動的に作成されます。[本文] セクションは 1 つのアクティビティだけを含めることができるため、シーケンスが必要になります。自動的に新しい Sequence アクティビティを作成することは .NET Framework 4.5 RC の新機能です。
Assign アクティビティの追加先プロパティを index に設定します。Assign アクティビティの値プロパティを index+1 に設定します。
カスタムの MyForEach アクティビティは、Items コレクションを通じて渡された値ごとに任意のアクティビティを 1 回呼び出し、コレクションの値をアクティビティの入力として使用します。
ワーク フローにカスタム アクティビティを使用する
Ctrl キーと Shift キーを押しながら B キーを押して、プロジェクトをビルドします。
ソリューション エクスプローラーで、デザイナーの Workflow1.xaml を開きます。
MyForEach アクティビティをツールボックスからデザイナー画面にドラッグします。アクティビティは、プロジェクトと同じ名前のツールボックスのセクションにあります。
MyForEach アクティビティの項目プロパティを new Object[] {1, "abc"} に設定します。
WriteLine アクティビティを、ツールボックスの [プリミティブ] セクションから MyForEach アクティビティの [デリゲート:本文] セクションにドラッグします。
WriteLine アクティビティのテキスト プロパティを Argument.ToString() に設定します。
ワーク フローの実行時に、コンソールには次のように表示されます。