WorkflowInvoker.Invoke 方法

定義

同步呼叫工作流程,並回傳根活動的字典,並OutArgumentInOutArgument參數名稱標示的值,代表工作流程的輸出。

多載

名稱 Description
Invoke(Activity, IDictionary<String,Object>, TimeSpan)

使用指定的工作流程定義、 IDictionary<TKey,TValue> 輸入參數及逾時區間,同步呼叫工作流程。

Invoke(Activity, TimeSpan)

使用指定的工作流程定義與逾時間隔同步呼叫工作流程。

Invoke(Activity, IDictionary<String,Object>)

使用指定的工作流程定義與 IDictionary<TKey,TValue> 輸入參數同步呼叫工作流程。

Invoke(IDictionary<String,Object>, TimeSpan)

以指定的WorkflowInvoker(Activity)輸入參數與逾時區間同步呼叫傳入IDictionary<TKey,TValue>建構子的活動。

Invoke(IDictionary<String,Object>)

與指定的WorkflowInvoker(Activity)輸入參數同步呼叫傳遞給建構子的IDictionary<TKey,TValue>活動。

Invoke(Activity)

根據指定的工作流程定義同步呼叫工作流程。

Invoke()

利用傳給 WorkflowInvoker(Activity) 建構子的工作流程定義同步呼叫工作流程。

Invoke(TimeSpan)

與指定的逾時間隔同步呼叫工作流程。

Invoke<TResult>(Activity<TResult>)

利用傳給 WorkflowInvoker(Activity) 建構子的工作流程定義同步呼叫工作流程。

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)

使用指定的工作流程定義與 IDictionary<TKey,TValue> 輸入參數同步呼叫工作流程。

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)

使用指定的工作流程定義、 IDictionary<TKey,TValue> 輸入參數及逾時區間,同步呼叫工作流程。

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)

根據指定的工作流程定義 IDictionary<TKey,TValue> 、輸入參數、 IDictionary<TKey,TValue> 額外輸出參數及逾時區間,同步呼叫工作流程。

備註

此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若要設定工作流程必須完成的逾時間隔,請使用其中一種佔用 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

工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException

傳回

一個根活動 OutArgument 的字典, InOutArgument 並以參數名稱標示,代表工作流程的輸出。

範例

以下範例呼叫一個包含兩個 WriteLine 活動和一個 Delay 設定為 Duration 一分鐘的活動的工作流程。 此工作流程會被呼叫兩次;第一次有兩分鐘的暫停間隔,第二次則有30秒的暫停間隔。 第一個工作流程成功完成,但第二個流程沒有,導致拋出 a 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 超載,且參數與此超載相同,但不含逾時區間。

備註

此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a TimeoutException

Note

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

工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException

傳回

一個根活動 OutArgument 的字典, InOutArgument 並以參數名稱標示,代表工作流程的輸出。

範例

以下範例呼叫一個包含兩個 WriteLine 活動和一個 Delay 設定為 Duration 一分鐘的活動的工作流程。 此工作流程會被呼叫兩次;第一次有兩分鐘的暫停間隔,第二次則有30秒的暫停間隔。 第一個工作流程成功完成,但第二個流程沒有,導致拋出 a 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

備註

此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a TimeoutException

Note

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

工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException

傳回

一個根活動 OutArgument 的字典, InOutArgument 並以參數名稱標示,代表工作流程的輸出。

範例

以下範例呼叫一個包含兩個 WriteLine 活動和一個 Delay 設定為 Duration 一分鐘的活動的工作流程。 此工作流程會被呼叫兩次;第一次有兩分鐘的暫停間隔,第二次則有30秒的暫停間隔。 第一個工作流程成功完成,但第二個流程沒有,因此拋出 a 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 超載,且參數與此超載相同,但不含逾時區間。

備註

此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a TimeoutException

Note

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 傳時,每個輸出參數會以參數名稱鍵化,返回在輸出字典中。

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 傳時,每個輸出參數會以參數名稱鍵化,返回在輸出字典中。 工作流程會被呼叫兩次,使用傳入 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

工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException

傳回

一個根活動 OutArgument 的字典, InOutArgument 並以參數名稱標示,代表工作流程的輸出。

範例

以下範例呼叫一個包含兩個 WriteLine 活動和一個 Delay 設定為 Duration 一分鐘的活動的工作流程。 此工作流程會被呼叫兩次;第一次有兩分鐘的暫停間隔,第二次則有30秒的暫停間隔。 第一個工作流程成功完成,但第二個流程沒有,因此拋出 a 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

備註

此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a TimeoutException

Note

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

一個 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

一個 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

Note

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

工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException

傳回

TResult

一個 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);

備註

此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a TimeoutException

Note

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

工作流程必須完成的間隔,然後才會中止並拋出 a TimeoutException

傳回

TResult

一個 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);

備註

此方法會阻塞直到工作流程完成,包括閒置時間。 所有工作流程執行都保證會在呼叫執行緒上執行。 若工作流程未在指定的逾時間隔內完成,工作流程將中止並拋出 a TimeoutException

Note

TimeoutException只有在逾時間隔經過且工作流程在執行期間變成閑置時,才會擲回 。 若工作流程完成時間超過指定的逾時區間,若該流程未進入閒置狀態,則該流程成功完成。

適用於