共用方式為


WorkflowEventArgs.WorkflowInstance 屬性

定義

取得與工作流程事件關聯的工作流程執行個體。

public:
 property System::Workflow::Runtime::WorkflowInstance ^ WorkflowInstance { System::Workflow::Runtime::WorkflowInstance ^ get(); };
public System.Workflow.Runtime.WorkflowInstance WorkflowInstance { get; }
member this.WorkflowInstance : System.Workflow.Runtime.WorkflowInstance
Public ReadOnly Property WorkflowInstance As WorkflowInstance

屬性值

與工作流程事件關聯的 WorkflowInstance

範例

下列程式碼範例將示範呼叫事件處理常式方法時,如何使用 WorkflowInstance 屬性取得 WorkflowInstance 物件。 當 WorkflowIdled 事件發生時,會呼叫此範例中定義的 OnWorkflowIdled 方法。 它會使用 WorkflowInstance 屬性判斷閒置的工作流程,然後呼叫 GetWorkflowQueueData 方法取得工作流程執行個體之佇列項目的集合。 此程式碼會在集合上反覆查看,以判斷是哪個活動正在等候閒置工作流程的事件。 然後,它會使用 EnqueueItem 方法以及事件佇列項目的名稱,將例外狀況傳送到工作流程佇列中。

這個程式碼範例是 Program.cs 檔案中<取消工作流程 SDK>範例的一部分。 如需詳細資訊,請參閱 取消工作流程

static void OnWorkflowIdled(object sender, WorkflowEventArgs e)
{
    WorkflowInstance workflow = e.WorkflowInstance;

    Console.WriteLine("\n...waiting for 3 seconds... \n");
    Thread.Sleep(3000);

    // what activity is blocking the workflow
    ReadOnlyCollection<WorkflowQueueInfo> wqi = workflow.GetWorkflowQueueData();
    foreach (WorkflowQueueInfo q in wqi)
    {
        EventQueueName eq = q.QueueName as EventQueueName;
        if (eq != null)
        {
            // get activity that is waiting for event
            ReadOnlyCollection<string> blockedActivity = q.SubscribedActivityNames;
            Console.WriteLine("Host: Workflow is blocked on " + blockedActivity[0]);

            // this event is never going to arrive eg. employee left the company
            // lets send an exception to this queue
            // it will either be handled by exception handler that was modeled in workflow
            // or the runtime will unwind running compensation handlers and exit the workflow
            Console.WriteLine("Host: This event is not going to arrive");
            Console.WriteLine("Host: Cancel workflow with unhandled exception");
            workflow.EnqueueItem(q.QueueName, new Exception("ExitWorkflowException"), null, null);
        }
    }
}
Shared Sub OnWorkflowIdled(ByVal sender As Object, ByVal e As WorkflowEventArgs)
    Dim workflow As WorkflowInstance = e.WorkflowInstance

    Console.WriteLine(vbCrLf + "...waiting for 3 seconds... " + vbCrLf)
    Thread.Sleep(3000)

    ' what activity is blocking the workflow
    Dim wqi As ReadOnlyCollection(Of WorkflowQueueInfo) = workflow.GetWorkflowQueueData()
    For Each q As WorkflowQueueInfo In wqi

        Dim eq As EventQueueName = TryCast(q.QueueName, EventQueueName)

        If eq IsNot Nothing Then
            ' get activity that is waiting for event
            Dim blockedActivity As ReadOnlyCollection(Of String) = q.SubscribedActivityNames
            Console.WriteLine("Host: Workflow is blocked on " + blockedActivity(0))

            ' this event is never going to arrive eg. employee left the company
            ' lets send an exception to this queue
            ' it will either be handled by exception handler that was modeled in workflow
            ' or the runtime will unwind running compensation handlers and exit the workflow
            Console.WriteLine("Host: This event is not going to arrive")
            Console.WriteLine("Host: Cancel workflow with unhandled exception")
            workflow.EnqueueItem(q.QueueName, New Exception("ExitWorkflowException"), Nothing, Nothing)
        End If
    Next
End Sub

適用於

另請參閱