WorkflowInvoker.Invoke Metod

Definition

Anropar ett arbetsflöde synkront och returnerar en ordlista med rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar utdata från arbetsflödet.

Överlagringar

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

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen, IDictionary<TKey,TValue> indataparametrarna och tidsgränsintervallet.

Invoke(Activity, TimeSpan)

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen och tidsgränsintervallet.

Invoke(Activity, IDictionary<String,Object>)

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen och IDictionary<TKey,TValue> indataparametrarna.

Invoke(IDictionary<String,Object>, TimeSpan)

Anropar aktiviteten som skickas till WorkflowInvoker(Activity) konstruktorn synkront med angivna IDictionary<TKey,TValue> indataparametrar och det angivna tidsgränsintervallet.

Invoke(IDictionary<String,Object>)

Anropar aktiviteten som skickas till WorkflowInvoker(Activity) konstruktorn synkront med angivna IDictionary<TKey,TValue> indataparametrar.

Invoke(Activity)

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen.

Invoke()

Anropar ett arbetsflöde synkront med hjälp av arbetsflödesdefinitionen som skickas WorkflowInvoker(Activity) till konstruktorn.

Invoke(TimeSpan)

Anropar ett arbetsflöde synkront med det angivna tidsgränsintervallet.

Invoke<TResult>(Activity<TResult>)

Anropar ett arbetsflöde synkront med hjälp av arbetsflödesdefinitionen som skickas WorkflowInvoker(Activity) till konstruktorn.

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

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen och IDictionary<TKey,TValue> indataparametrarna.

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

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen, IDictionary<TKey,TValue> indataparametrarna och tidsgränsintervallet.

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

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen, IDictionary<TKey,TValue> indataparametrar, IDictionary<TKey,TValue> ytterligare utdataparametrar och tidsgränsintervall.

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om du vill konfigurera ett tidsgränsintervall där arbetsflödet måste slutföras använder du en av de Invoke överlagringar som tar en TimeSpan.

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

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen, IDictionary<TKey,TValue> indataparametrarna och tidsgränsintervallet.

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)

Parametrar

workflow
Activity

Arbetsflödesdefinitionen för arbetsflödet som ska anropas.

inputs
IDictionary<String,Object>

Ordlistan med indataparametrar till arbetsflödet, med namnet på argumentet.

timeout
TimeSpan

Intervallet då arbetsflödet måste slutföras innan det avbryts och ett TimeoutException genereras.

Returer

En ordlista över rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar arbetsflödets utdata.

Exempel

I följande exempel anropas ett arbetsflöde som innehåller två WriteLine aktiviteter och en Delay aktivitet som konfigurerats med en Duration minut. Det här arbetsflödet anropas två gånger. första gången med ett tidsgränsintervall på två minuter och den andra tiden med ett tidsgränsintervall på 30 sekunder. Det första arbetsflödet har slutförts, men det andra gör det inte och ett TimeoutException genereras.

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);
}

Ett exempel på användning Invoke med indata- och utdataargument finns i överlagringen av Invoke med samma parametrar som den här överlagringen utan tidsgränsintervallet.

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om arbetsflödet inte slutförs inom det angivna tidsgränsintervallet avbryts arbetsflödet och ett TimeoutException genereras.

Note

TimeoutException genereras endast om tidsgränsintervallet löper ut och arbetsflödet är inaktivt under körning. Ett arbetsflöde som tar längre tid än det angivna tidsgränsintervallet för att slutföras slutförs om arbetsflödet inte blir inaktivt.

Gäller för

Invoke(Activity, TimeSpan)

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen och tidsgränsintervallet.

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)

Parametrar

workflow
Activity

Arbetsflödesdefinitionen för arbetsflödet som ska anropas.

timeout
TimeSpan

Intervallet då arbetsflödet måste slutföras innan det avbryts och ett TimeoutException genereras.

Returer

En ordlista över rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar arbetsflödets utdata.

Exempel

I följande exempel anropas ett arbetsflöde som innehåller två WriteLine aktiviteter och en Delay aktivitet som konfigurerats med en Duration minut. Det här arbetsflödet anropas två gånger. första gången med ett tidsgränsintervall på två minuter och den andra tiden med ett tidsgränsintervall på 30 sekunder. Det första arbetsflödet har slutförts, men det andra gör det inte och ett TimeoutException genereras.

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);
}

Ett exempel på hur du använder Invoke med utdataargument finns i överlagringen av Invoke med samma parametrar som den här överlagringen utan tidsgränsintervallet.

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om arbetsflödet inte slutförs inom det angivna tidsgränsintervallet avbryts arbetsflödet och ett TimeoutException genereras.

Note

TimeoutException genereras endast om tidsgränsintervallet löper ut och arbetsflödet är inaktivt under körning. Ett arbetsflöde som tar längre tid än det angivna tidsgränsintervallet för att slutföras slutförs om arbetsflödet inte blir inaktivt.

Gäller för

Invoke(Activity, IDictionary<String,Object>)

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen och IDictionary<TKey,TValue> indataparametrarna.

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)

Parametrar

workflow
Activity

Arbetsflödesdefinitionen för arbetsflödet som ska anropas.

inputs
IDictionary<String,Object>

Ordlistan med indataparametrar till arbetsflödet, med namnet på argumentet.

Returer

En ordlista över rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar arbetsflödets utdata.

Exempel

I följande exempel anropas ett arbetsflöde som består av en enda Divide aktivitet som har två indataargument och två utdataargument. När arbetsflödet anropas skickas arguments ordlistan som innehåller värdena för varje indataargument, med namnet på argumentet. När anropet till Invoke återvänder, returneras varje utdataargument i outputs-uppslagslistan, vilka också är nycklade med argumentnamnet.

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"]);

Om arbetsflödet härleds från ActivityWithResult, till exempel CodeActivity<TResult> eller Activity<TResult>, och det finns utdataargument utöver det väldefinierade Result utdataargumentet, måste en icke-generisk överlagring av Invoke, som den här, användas för att hämta ytterligare argument. För att göra detta måste arbetsflödesdefinitionen som skickas till Invoke vara av typen Activity. I det här exemplet Divide härleds aktiviteten från CodeActivity<int>, men deklareras som Activity så att den här överlagringen av Invoke, som returnerar en ordlista med argument i stället för ett enda returvärde, används.

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"]);

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om du vill konfigurera ett tidsgränsintervall där arbetsflödet måste slutföras använder du en av de Invoke överlagringar som tar en TimeSpan.

Gäller för

Invoke(IDictionary<String,Object>, TimeSpan)

Anropar aktiviteten som skickas till WorkflowInvoker(Activity) konstruktorn synkront med angivna IDictionary<TKey,TValue> indataparametrar och det angivna tidsgränsintervallet.

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)

Parametrar

inputs
IDictionary<String,Object>

Ordlistan med indataparametrar till arbetsflödet, med namnet på argumentet.

timeout
TimeSpan

Intervallet då arbetsflödet måste slutföras innan det avbryts och ett TimeoutException genereras.

Returer

En ordlista över rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar arbetsflödets utdata.

Exempel

I följande exempel anropas ett arbetsflöde som innehåller två WriteLine aktiviteter och en Delay aktivitet som konfigurerats med en Duration minut. Det här arbetsflödet anropas två gånger. första gången med ett tidsgränsintervall på två minuter och den andra tiden med ett tidsgränsintervall på 30 sekunder. Det första arbetsflödet har slutförts, men det andra inte och ett TimeoutException genereras och följande meddelande visas.

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);
}

Ett exempel på användning Invoke med indata- och utdataargument finns i överlagringen av Invoke med samma parametrar som den här överlagringen utan tidsgränsintervallet.

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om arbetsflödet inte slutförs inom det angivna tidsgränsintervallet avbryts arbetsflödet och ett TimeoutException genereras.

Note

TimeoutException genereras endast om tidsgränsintervallet löper ut och arbetsflödet är inaktivt under körning. Ett arbetsflöde som tar längre tid än det angivna tidsgränsintervallet för att slutföras slutförs om arbetsflödet inte blir inaktivt.

Gäller för

Invoke(IDictionary<String,Object>)

Anropar aktiviteten som skickas till WorkflowInvoker(Activity) konstruktorn synkront med angivna IDictionary<TKey,TValue> indataparametrar.

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)

Parametrar

inputs
IDictionary<String,Object>

Ordlistan med indataparametrar till arbetsflödet, med namnet på argumentet.

Returer

En ordlista över rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar arbetsflödets utdata.

Exempel

I följande exempel anropas ett arbetsflöde som består av en enda Divide aktivitet som har två indataargument och två utdataargument. När arbetsflödet anropas skickas arguments ordlistan som innehåller värdena för varje indataargument, med namnet på argumentet. När anropet till Invoke återvänder, returneras varje utdataargument i outputs-uppslagslistan, vilka också är nycklade med argumentnamnet.

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"]);

Om arbetsflödet härleds från ActivityWithResult, till exempel CodeActivity<TResult> eller Activity<TResult>, och det finns utdataargument utöver det väldefinierade Result utdataargumentet, måste en icke-generisk överlagring av Invoke, som den här, användas för att hämta ytterligare argument. För att göra detta måste arbetsflödesdefinitionen WorkflowInvoker som skickas till konstruktorn vara av typen Activity. I det här exemplet Divide härleds aktiviteten från CodeActivity<int>, men deklareras som Activity så att den här överlagringen av Invoke, som returnerar en ordlista med argument i stället för ett enda returvärde, används.

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"]);

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om du vill konfigurera ett tidsgränsintervall där arbetsflödet måste slutföras använder du en av de Invoke överlagringar som tar en TimeSpan.

Gäller för

Invoke(Activity)

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen.

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)

Parametrar

workflow
Activity

Arbetsflödesdefinitionen för arbetsflödet som ska anropas.

Returer

En ordlista över rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar arbetsflödets utdata.

Exempel

I följande exempel anropas ett arbetsflöde som består av en enda DiceRoll aktivitet. Aktiviteten DiceRoll har två utdataargument som representerar resultatet av tärningskaståtgärden. När anropet till Invoke returneras returneras varje utdataargument i utdataordlistan, med argumentets namn.

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"]);

Om arbetsflödets rotaktivitet inte har några utdataargument eller om de inte behövs av värden kan de ignoreras. I följande exempel anropas ett arbetsflöde som består av en enda WriteLine aktivitet som inte har några utdataargument.

Activity wf = new WriteLine
{
    Text = "Hello World."
};

WorkflowInvoker.Invoke(wf);

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om du vill konfigurera ett tidsgränsintervall där arbetsflödet måste slutföras använder du en av de Invoke överlagringar som tar en TimeSpan.

Gäller för

Invoke()

Anropar ett arbetsflöde synkront med hjälp av arbetsflödesdefinitionen som skickas WorkflowInvoker(Activity) till konstruktorn.

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)

Returer

En ordlista över rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar arbetsflödets utdata.

Exempel

I följande exempel anropas ett arbetsflöde som består av en enda DiceRoll aktivitet. Aktiviteten DiceRoll har två utdataargument som representerar resultatet av tärningskaståtgärden. När anropet till Invoke returneras returneras varje utdataargument i utdataordlistan, med argumentets namn. Arbetsflödet anropas två gånger med hjälp av arbetsflödesdefinitionen WorkflowInvoker som skickas till konstruktorn.

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"]);

Om arbetsflödets rotaktivitet inte har några utdataargument eller om de inte behövs av värden kan de ignoreras. I följande exempel anropas ett arbetsflöde som består av en enda WriteLine aktivitet som inte har några utdataargument.

Activity wf = new WriteLine
{
    Text = "Hello World."
};

WorkflowInvoker invoker = new WorkflowInvoker(wf);

invoker.Invoke();

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om du vill konfigurera ett tidsgränsintervall där arbetsflödet måste slutföras använder du en av de Invoke överlagringar som tar en TimeSpan.

Gäller för

Invoke(TimeSpan)

Anropar ett arbetsflöde synkront med det angivna tidsgränsintervallet.

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)

Parametrar

timeout
TimeSpan

Intervallet då arbetsflödet måste slutföras innan det avbryts och ett TimeoutException genereras.

Returer

En ordlista över rotaktivitetens OutArgument och InOutArgument värden som är nyckelade efter argumentnamn som representerar arbetsflödets utdata.

Exempel

I följande exempel anropas ett arbetsflöde som innehåller två WriteLine aktiviteter och en Delay aktivitet som konfigurerats med en Duration minut. Det här arbetsflödet anropas två gånger. första gången med ett tidsgränsintervall på två minuter och den andra tiden med ett tidsgränsintervall på 30 sekunder. Det första arbetsflödet har slutförts, men det andra inte och ett TimeoutException genereras och följande meddelande visas.

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);
}

Ett exempel på hur du använder Invoke med utdataargument finns i överlagringen av Invoke med samma parametrar som den här överlagringen utan tidsgränsintervallet.

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om arbetsflödet inte slutförs inom det angivna tidsgränsintervallet avbryts arbetsflödet och ett TimeoutException genereras.

Note

TimeoutException genereras endast om tidsgränsintervallet löper ut och arbetsflödet är inaktivt under körning. Ett arbetsflöde som tar längre tid än det angivna tidsgränsintervallet för att slutföras slutförs om arbetsflödet inte blir inaktivt.

Gäller för

Invoke<TResult>(Activity<TResult>)

Anropar ett arbetsflöde synkront med hjälp av arbetsflödesdefinitionen som skickas WorkflowInvoker(Activity) till konstruktorn.

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

Typparametrar

TResult

Typen av arbetsflöde.

Parametrar

workflow
Activity<TResult>

Arbetsflödesdefinitionen för arbetsflödet som ska anropas. Arbetsflödesdefinitionen måste härledas från ActivityWithResult.

Returer

TResult

Ett värde av typen TResult med resultatet av körningen av aktiviteten.

Exempel

I följande exempel anropas ett arbetsflöde som består av en enda Add aktivitet som har två indataargument och eftersom det härleds från CodeActivity<int> det har ett väldefinierat Result utdataargument. När arbetsflödet anropas skickas arguments ordlistan som innehåller värdena för varje indataargument, med namnet på argumentet. När anropet till Invoke returneras returneras värdet för utdataargumentet 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);

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om du vill konfigurera ett tidsgränsintervall där arbetsflödet måste slutföras använder du en av de Invoke överlagringar som tar en TimeSpan.

Gäller för

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

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen och IDictionary<TKey,TValue> indataparametrarna.

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

Typparametrar

TResult

Typen av arbetsflöde.

Parametrar

workflow
Activity<TResult>

Arbetsflödesdefinitionen för arbetsflödet som ska anropas.

inputs
IDictionary<String,Object>

Ordlistan med indataparametrar till arbetsflödet, med namnet på argumentet.

Returer

TResult

Ett värde av typen TResult med resultatet av körningen av aktiviteten.

Exempel

I följande exempel anropas ett arbetsflöde som består av en enda Add aktivitet som har två indataargument och eftersom det härleds från CodeActivity<int> det har ett väldefinierat Result utdataargument. När arbetsflödet anropas skickas arguments ordlistan som innehåller värdena för varje indataargument, med namnet på argumentet. När anropet till Invoke returneras returneras värdet för utdataargumentet 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);

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om du vill konfigurera ett tidsgränsintervall där arbetsflödet måste slutföras använder du en av de Invoke överlagringar som tar en TimeSpan.

Note

TimeoutException genereras endast om tidsgränsintervallet löper ut och arbetsflödet är inaktivt under körning. Ett arbetsflöde som tar längre tid än det angivna tidsgränsintervallet att slutföras, slutförs om arbetsflödet inte blir inaktivt.

Gäller för

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

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen, IDictionary<TKey,TValue> indataparametrarna och tidsgränsintervallet.

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

Typparametrar

TResult

Typen av arbetsflöde.

Parametrar

workflow
Activity<TResult>

Arbetsflödesdefinitionen för arbetsflödet som ska anropas.

inputs
IDictionary<String,Object>

Ordlistan med indataparametrar till arbetsflödet, med namnet på argumentet.

timeout
TimeSpan

Intervallet då arbetsflödet måste slutföras innan det avbryts och ett TimeoutException genereras.

Returer

TResult

Ett värde av typen TResult med resultatet av körningen av aktiviteten.

Exempel

I följande exempel anropas ett arbetsflöde som består av en enda Add aktivitet som har två indataargument och eftersom det härleds från CodeActivity<int> det har ett väldefinierat Result utdataargument. När arbetsflödet anropas skickas arguments ordlistan som innehåller värdena för varje indataargument, med namnet på argumentet. När anropet till Invoke returneras returneras värdet för utdataargumentet 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);

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om arbetsflödet inte slutförs inom det angivna tidsgränsintervallet avbryts arbetsflödet och ett TimeoutException genereras.

Note

TimeoutException genereras endast om tidsgränsintervallet löper ut och arbetsflödet är inaktivt under körning. Ett arbetsflöde som tar längre tid än det angivna tidsgränsintervallet att slutföras, slutförs om arbetsflödet inte blir inaktivt.

Gäller för

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

Anropar ett arbetsflöde synkront med den angivna arbetsflödesdefinitionen, IDictionary<TKey,TValue> indataparametrar, IDictionary<TKey,TValue> ytterligare utdataparametrar och tidsgränsintervall.

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

Typparametrar

TResult

Typen av arbetsflöde.

Parametrar

workflow
Activity<TResult>

Arbetsflödesdefinitionen för arbetsflödet som ska anropas.

inputs
IDictionary<String,Object>

Ordlistan med indataparametrar till arbetsflödet, med namnet på argumentet.

additionalOutputs
IDictionary<String,Object>

Ordlistan med ytterligare utdataparametrar i arbetsflödet, med namnet på argumentet.

timeout
TimeSpan

Intervallet då arbetsflödet måste slutföras innan det avbryts och ett TimeoutException genereras.

Returer

TResult

Ett värde av typen TResult med resultatet av körningen av aktiviteten.

Exempel

I följande exempel anropas ett arbetsflöde som består av en enda Add aktivitet som har två indataargument och eftersom det härleds från CodeActivity<int> det har ett väldefinierat Result utdataargument. När arbetsflödet anropas skickas arguments ordlistan som innehåller värdena för varje indataargument, med namnet på argumentet. När anropet till Invoke returneras returneras värdet för utdataargumentet 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);

Kommentarer

Den här metoden blockerar tills arbetsflödet har slutförts, inklusive inaktivitetstid. All arbetsflödeskörning kommer garanterat att köras på den anropande tråden. Om arbetsflödet inte slutförs inom det angivna tidsgränsintervallet avbryts arbetsflödet och ett TimeoutException genereras.

Note

TimeoutException genereras endast om tidsgränsintervallet löper ut och arbetsflödet är inaktivt under körning. Ett arbetsflöde som tar längre tid än det angivna tidsgränsintervallet att slutföras, slutförs om arbetsflödet inte blir inaktivt.

Gäller för