0

program.cs에 '워크 플로주기주기 이벤트'가있는 경우.워크 플로 (WF)주기주기 이벤트

WaitOne()이 도착할 신호를 기다리는 것을 이해할 수 없습니까?

Completed이 가장 높은 우선 순위를 갖거나 idle이 가장 높은 우선 순위를 갖거나 어떤 신호가 도착하더라도 수신됩니까?

app.Run(); 
syncEvent.WaitOne(); 



app.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) 
{ 
    return PersistableIdleAction.Unload; 
}; 

app.Unloaded = delegate(WorkflowApplicationEventArgs e) 
{ 
    Console.WriteLine("Workflow {0} Unloaded.", e.InstanceId); 
    syncEvent.Set(); 
}; 


app.Completed = delegate(WorkflowApplicationCompletedEventArgs e) 
{ 
    if (e.CompletionState == ActivityInstanceState.Faulted) 
    { 
     Console.WriteLine("Workflow {0} Terminated.", e.InstanceId); 
     Console.WriteLine("Exception: {0}\n{1}", 
      e.TerminationException.GetType().FullName, 
      e.TerminationException.Message); 
    } 
    else if (e.CompletionState == ActivityInstanceState.Canceled) 
    { 
     Console.WriteLine("Workflow {0} Canceled.", e.InstanceId); 
    } 
    else 
    { 
     Console.WriteLine("Workflow {0} Completed.", e.InstanceId); 
    } 
}; 

app.Aborted = delegate(WorkflowApplicationAbortedEventArgs e) 
{ 
    Console.WriteLine("Workflow {0} Aborted.", e.InstanceId); 
    Console.WriteLine("Exception: {0}\n{1}", 
     e.Reason.GetType().FullName, 
     e.Reason.Message); 
}; 

app.Idle = delegate(WorkflowApplicationIdleEventArgs e) 
{ 
    Console.WriteLine("Workflow {0} Idle.", e.InstanceId); 
}; 

app.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e) 
{ 
    Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}", 
     e.InstanceId, e.UnhandledException.Message); 

    Console.WriteLine("ExceptionSource: {0} - {1}", 
     e.ExceptionSource.DisplayName, e.ExceptionSourceInstanceId); 
    return UnhandledExceptionAction.Terminate; 
}; 

답변

1

귀하의 "언로드"이벤트 핸들러는 않습니다 : (가) 계속 기다려 드릴 것입니다

syncEvent.Set(); 

합니다.

이벤트는 우선 순위가 없으므로 발생 순서대로 표시됩니다.

+0

syncEvent.Set() -이 사실을 알리기 위해 하나 이상의 대기중인 스레드가 진행될 수 있도록 신호 상태로 이벤트 상태를 설정합니다. 그것이 어떻게 계속 될 것입니까? – immirza

+0

메인 스레드가 syncEvent.WaitOne()을 호출하면 다른 스레드가 syncEvent.Set()을 호출하여 메인 스레드가 계속 진행될 때까지 대기합니다. –