WorkflowInvoker.Invoke 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
以同步方式叫用工作流程並傳回根活動之 OutArgument 和 InOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。
多載
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 若要設定工作流程必須完成的逾時間隔,請使用接受 Invoke 的其中一個 TimeSpan 多載。
Invoke(Activity, IDictionary<String,Object>, TimeSpan)
使用指定的工作流程定義、輸入參數的 IDictionary<TKey,TValue> 和逾時間隔,以同步方式叫用工作流程。
public:
static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
static member Invoke : System.Activities.Activity * System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity, inputs As IDictionary(Of String, Object), timeout As TimeSpan) As IDictionary(Of String, Object)
參數
- workflow
- Activity
要叫用之工作流程的工作流程定義。
- inputs
- IDictionary<String,Object>
工作流程的輸入參數字典,以引數名稱做為索引鍵。
- timeout
- TimeSpan
工作流程必須在其中止並擲回 TimeoutException 前完成的間隔。
傳回
根活動之 OutArgument 和 InOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。
範例
下列範例會叫用包含兩個 WriteLine 活動以及一個使用 Delay 為一分鐘所設定之 Duration 活動的工作流程。 系統會叫用此工作流程兩次:第一次使用兩分鐘的逾時間隔,而第二次使用 30 秒的逾時間隔。 第一個工作流程會順利完成,但是第二個卻不會,因而擲回 TimeoutException。
Activity wf = new Sequence()
{
Activities =
{
new WriteLine()
{
Text = "Before the 1 minute delay."
},
new Delay()
{
Duration = TimeSpan.FromMinutes(1)
},
new WriteLine()
{
Text = "After the 1 minute delay."
}
}
};
// This workflow completes successfully.
WorkflowInvoker.Invoke(wf, TimeSpan.FromMinutes(2));
// This workflow does not complete and a TimeoutException
// is thrown.
try
{
WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
Console.WriteLine(ex.Message);
}
如需搭配輸入和輸出自變數使用 Invoke
的範例,請參閱的多載與這個多載 Invoke 相同的參數,而不使用超時時間間隔。
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 如果工作流程沒有在指定的逾時間隔內完成,則工作流程會中止並擲回 TimeoutException。
注意
只有在超過逾時間隔及工作流程在執行期間變成閒置狀態時,才會擲回 TimeoutException。 需要比指定的逾時間隔還長的時間才能完成的工作流程,會在工作流程沒有變成閒置狀態時成功完成。
適用於
Invoke(Activity, TimeSpan)
使用指定的工作流程定義和逾時間隔,以同步方式叫用工作流程。
public:
static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow, TimeSpan timeout);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, TimeSpan timeout);
static member Invoke : System.Activities.Activity * TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity, timeout As TimeSpan) As IDictionary(Of String, Object)
參數
- workflow
- Activity
要叫用之工作流程的工作流程定義。
- timeout
- TimeSpan
工作流程必須在其中止並擲回 TimeoutException 前完成的間隔。
傳回
根活動之 OutArgument 和 InOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。
範例
下列範例會叫用包含兩個 WriteLine 活動以及一個使用 Delay 為一分鐘所設定之 Duration 活動的工作流程。 系統會叫用此工作流程兩次:第一次使用兩分鐘的逾時間隔,而第二次使用 30 秒的逾時間隔。 第一個工作流程會順利完成,但是第二個卻不會,因而擲回 TimeoutException。
Activity wf = new Sequence()
{
Activities =
{
new WriteLine()
{
Text = "Before the 1 minute delay."
},
new Delay()
{
Duration = TimeSpan.FromMinutes(1)
},
new WriteLine()
{
Text = "After the 1 minute delay."
}
}
};
// This workflow completes successfully.
WorkflowInvoker.Invoke(wf, TimeSpan.FromMinutes(2));
// This workflow does not complete and a TimeoutException
// is thrown.
try
{
WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
Console.WriteLine(ex.Message);
}
如需搭配輸出自變數使用 Invoke
的範例,請參閱 的多載與這個多載 Invoke 相同的參數,而不使用超時時間間隔。
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 如果工作流程沒有在指定的逾時間隔內完成,則工作流程會中止並擲回 TimeoutException。
注意
只有在超過逾時間隔及工作流程在執行期間變成閒置狀態時,才會擲回 TimeoutException。 需要比指定的逾時間隔還長的時間才能完成的工作流程,會在工作流程沒有變成閒置狀態時成功完成。
適用於
Invoke(Activity, IDictionary<String,Object>)
使用指定的工作流程定義和輸入參數的 IDictionary<TKey,TValue>,以同步方式叫用工作流程。
public:
static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, System.Collections.Generic.IDictionary<string,object> inputs);
static member Invoke : System.Activities.Activity * System.Collections.Generic.IDictionary<string, obj> -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity, inputs As IDictionary(Of String, Object)) As IDictionary(Of String, Object)
參數
- workflow
- Activity
要叫用之工作流程的工作流程定義。
- inputs
- IDictionary<String,Object>
工作流程的輸入參數字典,以引數名稱做為索引鍵。
傳回
根活動之 OutArgument 和 InOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。
範例
下列範例會叫用由具有兩個輸入引數和兩個輸出引數之單一 Divide
活動組成的工作流程。 叫用此工作流程時,系統會傳遞包含每個輸入引數之值 (以引數名稱做為索引鍵) 的 arguments
字典。 當傳回 Invoke
的呼叫時,每個輸出引數都會傳入 outputs
字典 (也以引數名稱做為索引鍵)。
public sealed class Divide : CodeActivity
{
[RequiredArgument]
public InArgument<int> Dividend { get; set; }
[RequiredArgument]
public InArgument<int> Divisor { get; set; }
public OutArgument<int> Remainder { get; set; }
public OutArgument<int> Result { get; set; }
protected override void Execute(CodeActivityContext context)
{
int quotient = Dividend.Get(context) / Divisor.Get(context);
int remainder = Dividend.Get(context) % Divisor.Get(context);
Result.Set(context, quotient);
Remainder.Set(context, remainder);
}
}
int dividend = 500;
int divisor = 36;
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);
IDictionary<string, object> outputs =
WorkflowInvoker.Invoke(new Divide(), arguments);
Console.WriteLine("{0} / {1} = {2} Remainder {3}",
dividend, divisor, outputs["Result"], outputs["Remainder"]);
如果工作流程衍生自 ActivityWithResult、例如 CodeActivity<TResult>
或 Activity<TResult>
,而且除了定義完善的 Result 輸出自變數之外,還有輸出自變數,則必須使用非泛型多載 Invoke
,例如這個自變數,才能擷取其他自變數。 若要這樣做,傳遞給 Invoke
的工作流程定義必須屬於 Activity 型別。 在此範例中,活動 Divide
衍生自 CodeActivity<int>
,但宣告為 Activity , Invoke
因此會傳回自變數的字典,而不是使用單一傳回值。
public sealed class Divide : CodeActivity<int>
{
public InArgument<int> Dividend { get; set; }
public InArgument<int> Divisor { get; set; }
public OutArgument<int> Remainder { get; set; }
protected override int Execute(CodeActivityContext context)
{
int quotient = Dividend.Get(context) / Divisor.Get(context);
int remainder = Dividend.Get(context) % Divisor.Get(context);
Remainder.Set(context, remainder);
return quotient;
}
}
int dividend = 500;
int divisor = 36;
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);
Activity wf = new Divide();
IDictionary<string, object> outputs =
WorkflowInvoker.Invoke(wf, arguments);
Console.WriteLine("{0} / {1} = {2} Remainder {3}",
dividend, divisor, outputs["Result"], outputs["Remainder"]);
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 若要設定工作流程必須完成的逾時間隔,請使用接受 Invoke 的其中一個 TimeSpan 多載。
適用於
Invoke(IDictionary<String,Object>, TimeSpan)
使用指定的輸入參數 WorkflowInvoker(Activity) 和指定的逾時間隔,以同步方式叫用傳遞至 IDictionary<TKey,TValue> 建構函式的活動。
public:
System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public System.Collections.Generic.IDictionary<string,object> Invoke (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
member this.Invoke : System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Function Invoke (inputs As IDictionary(Of String, Object), timeout As TimeSpan) As IDictionary(Of String, Object)
參數
- inputs
- IDictionary<String,Object>
工作流程的輸入參數字典,以引數名稱做為索引鍵。
- timeout
- TimeSpan
工作流程必須在其中止並擲回 TimeoutException 前完成的間隔。
傳回
根活動之 OutArgument 和 InOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。
範例
下列範例會叫用包含兩個 WriteLine 活動以及一個使用 Delay 為一分鐘所設定之 Duration 活動的工作流程。 系統會叫用此工作流程兩次:第一次使用兩分鐘的逾時間隔,而第二次使用 30 秒的逾時間隔。 第一個工作流程會順利完成,但是第二個卻不會,因而擲回 TimeoutException 並顯示下列訊息。
The operation did not complete within the allotted timeout of 00:00:30.
The time allotted to this operation may have been a portion of a longer timeout.
Activity wf = new Sequence()
{
Activities =
{
new WriteLine()
{
Text = "Before the 1 minute delay."
},
new Delay()
{
Duration = TimeSpan.FromMinutes(1)
},
new WriteLine()
{
Text = "After the 1 minute delay."
}
}
};
WorkflowInvoker invoker = new WorkflowInvoker(wf);
// This workflow completes successfully.
invoker.Invoke(TimeSpan.FromMinutes(2));
// This workflow does not complete and a TimeoutException
// is thrown.
try
{
invoker.Invoke(TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
Console.WriteLine(ex.Message);
}
如需搭配輸入和輸出自變數使用 Invoke
的範例,請參閱的多載與這個多載 Invoke 相同的參數,而不使用超時時間間隔。
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 如果工作流程沒有在指定的逾時間隔內完成,則工作流程會中止並擲回 TimeoutException。
注意
只有在超過逾時間隔及工作流程在執行期間變成閒置狀態時,才會擲回 TimeoutException。 需要比指定的逾時間隔還長的時間才能完成的工作流程,會在工作流程沒有變成閒置狀態時成功完成。
適用於
Invoke(IDictionary<String,Object>)
使用指定的輸入參數 WorkflowInvoker(Activity),以同步方式叫用傳遞至 IDictionary<TKey,TValue> 建構函式的活動。
public:
System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public System.Collections.Generic.IDictionary<string,object> Invoke (System.Collections.Generic.IDictionary<string,object> inputs);
member this.Invoke : System.Collections.Generic.IDictionary<string, obj> -> System.Collections.Generic.IDictionary<string, obj>
Public Function Invoke (inputs As IDictionary(Of String, Object)) As IDictionary(Of String, Object)
參數
- inputs
- IDictionary<String,Object>
工作流程的輸入參數字典,以引數名稱做為索引鍵。
傳回
根活動之 OutArgument 和 InOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。
範例
下列範例會叫用由具有兩個輸入引數和兩個輸出引數之單一 Divide
活動組成的工作流程。 叫用此工作流程時,系統會傳遞包含每個輸入引數之值 (以引數名稱做為索引鍵) 的 arguments
字典。 當傳回 Invoke
的呼叫時,每個輸出引數都會傳入 outputs
字典 (也以引數名稱做為索引鍵)。
public sealed class Divide : CodeActivity
{
[RequiredArgument]
public InArgument<int> Dividend { get; set; }
[RequiredArgument]
public InArgument<int> Divisor { get; set; }
public OutArgument<int> Remainder { get; set; }
public OutArgument<int> Result { get; set; }
protected override void Execute(CodeActivityContext context)
{
int quotient = Dividend.Get(context) / Divisor.Get(context);
int remainder = Dividend.Get(context) % Divisor.Get(context);
Result.Set(context, quotient);
Remainder.Set(context, remainder);
}
}
int dividend = 500;
int divisor = 36;
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);
WorkflowInvoker invoker = new WorkflowInvoker(new Divide());
IDictionary<string, object> outputs = invoker.Invoke(arguments);
Console.WriteLine("{0} / {1} = {2} Remainder {3}",
dividend, divisor, outputs["Result"], outputs["Remainder"]);
如果工作流程衍生自 ActivityWithResult、例如 CodeActivity<TResult>
或 Activity<TResult>
,而且除了定義完善的 Result 輸出自變數之外,還有輸出自變數,則必須使用非泛型多載 Invoke
,例如這個自變數,才能擷取其他自變數。 若要這樣做,傳遞至建構函式的 WorkflowInvoker
工作流程定義必須是 類型 Activity。 在此範例中,活動 Divide
衍生自 CodeActivity<int>
,但宣告為 Activity , Invoke
因此會傳回自變數的字典,而不是使用單一傳回值。
public sealed class Divide : CodeActivity<int>
{
public InArgument<int> Dividend { get; set; }
public InArgument<int> Divisor { get; set; }
public OutArgument<int> Remainder { get; set; }
protected override int Execute(CodeActivityContext context)
{
int quotient = Dividend.Get(context) / Divisor.Get(context);
int remainder = Dividend.Get(context) % Divisor.Get(context);
Remainder.Set(context, remainder);
return quotient;
}
}
int dividend = 500;
int divisor = 36;
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);
Activity wf = new Divide();
WorkflowInvoker invoker = new WorkflowInvoker(wf);
IDictionary<string, object> outputs = invoker.Invoke(arguments);
Console.WriteLine("{0} / {1} = {2} Remainder {3}",
dividend, divisor, outputs["Result"], outputs["Remainder"]);
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 若要設定工作流程必須完成的逾時間隔,請使用接受 Invoke 的其中一個 TimeSpan 多載。
適用於
Invoke(Activity)
使用指定的工作流程定義,以同步方式叫用工作流程。
public:
static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow);
static member Invoke : System.Activities.Activity -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity) As IDictionary(Of String, Object)
參數
- workflow
- Activity
要叫用之工作流程的工作流程定義。
傳回
根活動之 OutArgument 和 InOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。
範例
下列範例會叫用由單一 DiceRoll
活動組成的工作流程。 DiceRoll
活動具有兩個輸出引數,這些引數代表擲骰作業的結果。 當 Invoke
的呼叫傳回時,每個輸出引數都會傳入 outputs 字典 (以引數名稱做為索引鍵)。
public sealed class DiceRoll : CodeActivity
{
public OutArgument<int> D1 { get; set; }
public OutArgument<int> D2 { get; set; }
static Random r = new Random();
protected override void Execute(CodeActivityContext context)
{
D1.Set(context, r.Next(1, 7));
D2.Set(context, r.Next(1, 7));
}
}
IDictionary<string, object> outputs =
WorkflowInvoker.Invoke(new DiceRoll());
Console.WriteLine("The two dice are {0} and {1}.",
outputs["D1"], outputs["D2"]);
如果此工作流程的根活動沒有任何輸出引數,或者主機不需要這些引數,它們可能會被忽略。 下列範例會叫用由沒有任何輸出引數之單一 WriteLine 活動組成的工作流程。
Activity wf = new WriteLine
{
Text = "Hello World."
};
WorkflowInvoker.Invoke(wf);
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 若要設定工作流程必須完成的逾時間隔,請使用接受 Invoke 的其中一個 TimeSpan 多載。
適用於
Invoke()
使用傳遞給 WorkflowInvoker(Activity) 建構函式的工作流程定義,以同步方式叫用工作流程。
public:
System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke();
public System.Collections.Generic.IDictionary<string,object> Invoke ();
member this.Invoke : unit -> System.Collections.Generic.IDictionary<string, obj>
Public Function Invoke () As IDictionary(Of String, Object)
傳回
根活動之 OutArgument 和 InOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。
範例
下列範例會叫用由單一 DiceRoll
活動組成的工作流程。 DiceRoll
活動具有兩個輸出引數,這些引數代表擲骰作業的結果。 當 Invoke
的呼叫傳回時,每個輸出引數都會傳入 outputs 字典 (以引數名稱做為索引鍵)。 工作流程會使用傳遞至建構函式的 WorkflowInvoker
工作流程定義來叫用兩次。
public sealed class DiceRoll : CodeActivity
{
public OutArgument<int> D1 { get; set; }
public OutArgument<int> D2 { get; set; }
static Random r = new Random();
protected override void Execute(CodeActivityContext context)
{
D1.Set(context, r.Next(1, 7));
D2.Set(context, r.Next(1, 7));
}
}
WorkflowInvoker invoker = new WorkflowInvoker(new DiceRoll());
IDictionary<string, object> outputs =
invoker.Invoke();
Console.WriteLine("The two dice are {0} and {1}.",
outputs["D1"], outputs["D2"]);
outputs = invoker.Invoke();
Console.WriteLine("The next two dice are {0} and {1}.",
outputs["D1"], outputs["D2"]);
如果此工作流程的根活動沒有任何輸出引數,或者主機不需要這些引數,它們可能會被忽略。 下列範例會叫用由沒有任何輸出引數之單一 WriteLine 活動組成的工作流程。
Activity wf = new WriteLine
{
Text = "Hello World."
};
WorkflowInvoker invoker = new WorkflowInvoker(wf);
invoker.Invoke();
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 若要設定工作流程必須完成的逾時間隔,請使用接受 Invoke 的其中一個 TimeSpan 多載。
適用於
Invoke(TimeSpan)
使用指定的逾時間隔,以同步方式叫用工作流程。
public:
System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(TimeSpan timeout);
public System.Collections.Generic.IDictionary<string,object> Invoke (TimeSpan timeout);
member this.Invoke : TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Function Invoke (timeout As TimeSpan) As IDictionary(Of String, Object)
參數
- timeout
- TimeSpan
工作流程必須在其中止並擲回 TimeoutException 前完成的間隔。
傳回
根活動之 OutArgument 和 InOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。
範例
下列範例會叫用包含兩個 WriteLine 活動以及一個使用 Delay 為一分鐘所設定之 Duration 活動的工作流程。 系統會叫用此工作流程兩次:第一次使用兩分鐘的逾時間隔,而第二次使用 30 秒的逾時間隔。 第一個工作流程會順利完成,但是第二個卻不會,因而擲回 TimeoutException 並顯示下列訊息。
The operation did not complete within the allotted timeout of 00:00:30.
The time allotted to this operation may have been a portion of a longer timeout.
Activity wf = new Sequence()
{
Activities =
{
new WriteLine()
{
Text = "Before the 1 minute delay."
},
new Delay()
{
Duration = TimeSpan.FromMinutes(1)
},
new WriteLine()
{
Text = "After the 1 minute delay."
}
}
};
WorkflowInvoker invoker = new WorkflowInvoker(wf);
// This workflow completes successfully.
invoker.Invoke(TimeSpan.FromMinutes(2));
// This workflow does not complete and a TimeoutException
// is thrown.
try
{
invoker.Invoke(TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
Console.WriteLine(ex.Message);
}
如需搭配輸出自變數使用 Invoke
的範例,請參閱 的多載與這個多載 Invoke 相同的參數,而不使用超時時間間隔。
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 如果工作流程沒有在指定的逾時間隔內完成,則工作流程會中止並擲回 TimeoutException。
注意
只有在超過逾時間隔及工作流程在執行期間變成閒置狀態時,才會擲回 TimeoutException。 需要比指定的逾時間隔還長的時間才能完成的工作流程,會在工作流程沒有變成閒置狀態時成功完成。
適用於
Invoke<TResult>(Activity<TResult>)
使用傳遞給 WorkflowInvoker(Activity) 建構函式的工作流程定義,以同步方式叫用工作流程。
public:
generic <typename TResult>
static TResult Invoke(System::Activities::Activity<TResult> ^ workflow);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow);
static member Invoke : System.Activities.Activity<'Result> -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult)) As TResult
類型參數
- TResult
工作流程的型別。
參數
- workflow
- Activity<TResult>
要叫用之工作流程的工作流程定義。 需要從 ActivityWithResult 衍生的工作流程定義。
傳回
包含活動執行結果之型別 TResult 的值。
範例
下列範例會叫用工作流程,其中包含具有兩個輸入自變數的單 Add
一活動,而且其衍生自 CodeActivity<int>
具有一個定義 Result 完善的輸出自變數。 叫用此工作流程時,系統會傳遞包含每個輸入引數之值 (以引數名稱做為索引鍵) 的 arguments
字典。 當呼叫傳 Invoke
回時,會傳回輸出自變數的值 Result 。
public sealed class Add : CodeActivity<int>
{
public InArgument<int> X { get; set; }
public InArgument<int> Y { get; set; }
protected override int Execute(CodeActivityContext context)
{
int x = X.Get(context);
int y = Y.Get(context);
return x + y;
}
}
int x = 1;
int y = 2;
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);
Console.WriteLine("Invoking Add.");
int result = WorkflowInvoker.Invoke(new Add(), arguments);
Console.WriteLine("{0} + {1} = {2}", x, y, result);
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 若要設定工作流程必須完成的逾時間隔,請使用接受 Invoke 的其中一個 TimeSpan 多載。
適用於
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)
使用指定的工作流程定義和輸入參數的 IDictionary<TKey,TValue>,以同步方式叫用工作流程。
public:
generic <typename TResult>
static TResult Invoke(System::Activities::Activity<TResult> ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs);
static member Invoke : System.Activities.Activity<'Result> * System.Collections.Generic.IDictionary<string, obj> -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult), inputs As IDictionary(Of String, Object)) As TResult
類型參數
- TResult
工作流程的型別。
參數
- workflow
- Activity<TResult>
要叫用之工作流程的工作流程定義。
- inputs
- IDictionary<String,Object>
工作流程的輸入參數字典,以引數名稱做為索引鍵。
傳回
包含活動執行結果之型別 TResult 的值。
範例
下列範例會叫用工作流程,其中包含具有兩個輸入自變數的單 Add
一活動,而且其衍生自 CodeActivity<int>
具有一個定義 Result 完善的輸出自變數。 叫用此工作流程時,系統會傳遞包含每個輸入引數之值 (以引數名稱做為索引鍵) 的 arguments
字典。 當呼叫傳 Invoke
回時,會傳回輸出自變數的值 Result 。
public sealed class Add : CodeActivity<int>
{
public InArgument<int> X { get; set; }
public InArgument<int> Y { get; set; }
protected override int Execute(CodeActivityContext context)
{
int x = X.Get(context);
int y = Y.Get(context);
return x + y;
}
}
int x = 1;
int y = 2;
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);
Console.WriteLine("Invoking Add.");
int result = WorkflowInvoker.Invoke(new Add(), arguments);
Console.WriteLine("{0} + {1} = {2}", x, y, result);
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 若要設定工作流程必須完成的逾時間隔,請使用接受 Invoke 的其中一個 TimeSpan 多載。
注意
只有在超過逾時間隔及工作流程在執行期間變成閒置狀態時,才會擲回 TimeoutException。 需要比指定的逾時間隔還長的時間才能完成的工作流程,會在工作流程沒有變成閒置狀態時成功完成。
適用於
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)
使用指定的工作流程定義、輸入參數的 IDictionary<TKey,TValue> 和逾時間隔,以同步方式叫用工作流程。
public:
generic <typename TResult>
static TResult Invoke(System::Activities::Activity<TResult> ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
static member Invoke : System.Activities.Activity<'Result> * System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult), inputs As IDictionary(Of String, Object), timeout As TimeSpan) As TResult
類型參數
- TResult
工作流程的型別。
參數
- workflow
- Activity<TResult>
要叫用之工作流程的工作流程定義。
- inputs
- IDictionary<String,Object>
工作流程的輸入參數字典,以引數名稱做為索引鍵。
- timeout
- TimeSpan
工作流程必須在其中止並擲回 TimeoutException 前完成的間隔。
傳回
包含活動執行結果之型別 TResult 的值。
範例
下列範例會叫用工作流程,其中包含具有兩個輸入自變數的單 Add
一活動,而且其衍生自 CodeActivity<int>
具有一個定義 Result 完善的輸出自變數。 叫用此工作流程時,系統會傳遞包含每個輸入引數之值 (以引數名稱做為索引鍵) 的 arguments
字典。 當呼叫傳 Invoke
回時,會傳回輸出自變數的值 Result 。
public sealed class Add : CodeActivity<int>
{
public InArgument<int> X { get; set; }
public InArgument<int> Y { get; set; }
protected override int Execute(CodeActivityContext context)
{
int x = X.Get(context);
int y = Y.Get(context);
return x + y;
}
}
int x = 1;
int y = 2;
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);
Console.WriteLine("Invoking Add.");
int result = WorkflowInvoker.Invoke(new Add(), arguments);
Console.WriteLine("{0} + {1} = {2}", x, y, result);
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 如果工作流程沒有在指定的逾時間隔內完成,則工作流程會中止並擲回 TimeoutException。
注意
只有在超過逾時間隔及工作流程在執行期間變成閒置狀態時,才會擲回 TimeoutException。 需要比指定的逾時間隔還長的時間才能完成的工作流程,會在工作流程沒有變成閒置狀態時成功完成。
適用於
Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)
使用指定的工作流程定義、輸入參數的 IDictionary<TKey,TValue>、其他輸出參數的 IDictionary<TKey,TValue> 和逾時間隔,以同步方式叫用工作流程。
public:
generic <typename TResult>
static TResult Invoke(System::Activities::Activity<TResult> ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, [Runtime::InteropServices::Out] System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ % additionalOutputs, TimeSpan timeout);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs, out System.Collections.Generic.IDictionary<string,object> additionalOutputs, TimeSpan timeout);
static member Invoke : System.Activities.Activity<'Result> * System.Collections.Generic.IDictionary<string, obj> * IDictionary * TimeSpan -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult), inputs As IDictionary(Of String, Object), ByRef additionalOutputs As IDictionary(Of String, Object), timeout As TimeSpan) As TResult
類型參數
- TResult
工作流程的型別。
參數
- workflow
- Activity<TResult>
要叫用之工作流程的工作流程定義。
- inputs
- IDictionary<String,Object>
工作流程的輸入參數字典,以引數名稱做為索引鍵。
- additionalOutputs
- IDictionary<String,Object>
工作流程的其他輸出參數字典,以引數名稱做為索引鍵。
- timeout
- TimeSpan
工作流程必須在其中止並擲回 TimeoutException 前完成的間隔。
傳回
包含活動執行結果之型別 TResult 的值。
範例
下列範例會叫用工作流程,其中包含具有兩個輸入自變數的單 Add
一活動,而且其衍生自 CodeActivity<int>
具有一個定義 Result 完善的輸出自變數。 叫用此工作流程時,系統會傳遞包含每個輸入引數之值 (以引數名稱做為索引鍵) 的 arguments
字典。 當呼叫傳 Invoke
回時,會傳回輸出自變數的值 Result 。
public sealed class Add : CodeActivity<int>
{
public InArgument<int> X { get; set; }
public InArgument<int> Y { get; set; }
protected override int Execute(CodeActivityContext context)
{
int x = X.Get(context);
int y = Y.Get(context);
return x + y;
}
}
int x = 1;
int y = 2;
Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);
Console.WriteLine("Invoking Add.");
int result = WorkflowInvoker.Invoke(new Add(), arguments);
Console.WriteLine("{0} + {1} = {2}", x, y, result);
備註
這個方法會封鎖至工作流程完成為止,包括閒置時間。 所有工作流程執行都一定會在叫用執行緒上執行。 如果工作流程沒有在指定的逾時間隔內完成,則工作流程會中止並擲回 TimeoutException。
注意
只有在超過逾時間隔及工作流程在執行期間變成閒置狀態時,才會擲回 TimeoutException。 需要比指定的逾時間隔還長的時間才能完成的工作流程,會在工作流程沒有變成閒置狀態時成功完成。