WorkflowInvoker.Invoke 方法

定義

以同步方式叫用工作流程並傳回根活動之 OutArgumentInOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。

多載

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

工作流程必須在其中止並擲回 TimeoutException 前完成的間隔。

傳回

根活動之 OutArgumentInOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。

範例

下列範例會叫用包含兩個 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 前完成的間隔。

傳回

根活動之 OutArgumentInOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。

範例

下列範例會叫用包含兩個 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>

工作流程的輸入參數字典,以引數名稱做為索引鍵。

傳回

根活動之 OutArgumentInOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。

範例

下列範例會叫用由具有兩個輸入引數和兩個輸出引數之單一 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> ,但宣告為 ActivityInvoke 因此會傳回引數的字典,而不是使用單一傳回值。

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 前完成的間隔。

傳回

根活動之 OutArgumentInOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。

範例

下列範例會叫用包含兩個 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>

工作流程的輸入參數字典,以引數名稱做為索引鍵。

傳回

根活動之 OutArgumentInOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。

範例

下列範例會叫用由具有兩個輸入引數和兩個輸出引數之單一 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> ,但宣告為 ActivityInvoke 因此會傳回引數的字典,而不是使用單一傳回值。

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

要叫用之工作流程的工作流程定義。

傳回

根活動之 OutArgumentInOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。

範例

下列範例會叫用由單一 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)

傳回

根活動之 OutArgumentInOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。

範例

下列範例會叫用由單一 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 前完成的間隔。

傳回

根活動之 OutArgumentInOutArgument 值 (以引數名稱作為索引鍵) 的字典,這些值代表工作流程的輸出。

範例

下列範例會叫用包含兩個 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

包含活動執行結果之型別 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 多載。

注意

只有在超過逾時間隔及工作流程在執行期間變成閒置狀態時,才會擲回 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

包含活動執行結果之型別 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

包含活動執行結果之型別 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。 需要比指定的逾時間隔還長的時間才能完成的工作流程,會在工作流程沒有變成閒置狀態時成功完成。

適用於