2011-02-14 3 views
3

StartProcessing() 메서드를 사용하는 비동기 클래스가 있는데 처리가 완료되면 int ResultReady() 이벤트가 발생합니다. StartProcessing()은 매우 짧은 시간이 걸립니다.대리자가 호출 될 때까지 대기

이 클래스를 동 기적으로 호출하려고합니다. 결과는

  • 반환 결과

  • 어떤 디자인 패턴이 준비가 될 때까지

    1. 통화 StartProcessing()

    2. 대기/절전 : 내 의사 코드 같은 것을해야한다 이것에 가장 좋은가? 코드 예제를 가르쳐 주시겠습니까?

    답변

    5

    이벤트 처리기와 대기 코드가 모두 액세스 할 수있는 ManualResetEvent을 사용하는 간단한 방법이 있습니다. 이벤트 처리기에서 Set을 호출하고 기다리는 스레드에서 WaitOne (또는 시간 초과가있는 오버로드)을 호출하십시오. STA 스레드에서는이 작업을 수행 할 수 없으므로 WinForms 스레드 (항상 STA 여야 함)에서 수행 할 수는 없지만 UI 스레드 내에서 기다리지 않아야합니다. 이 같은

    뭔가 : 나는이 작업을 수행 할 때

    var async = new AsyncClass(); 
    var manualEvent = new ManualResetEvent(); 
    async.ResultReady += args => manualEvent.Set(); 
    async.StartProcessing(); 
    manualEvent.WaitOne(); 
    
    +0

    는 ResultReady가 호출되지 않습니다 것으로 보인다. 대리인이 차단 된 같은 스레드에서 시작하도록 설정되어있는 것 같습니다. 그러나 내 경우에는 대리인이 내가 제어 할 수없는 프레임 워크에서 호출됩니다. 그러므로 나는 결코 WaitOne을 통과하지 못한다. 그것을 해결하는 방법에 대한 아이디어가 있습니까? – dynamokaj

    +0

    @dynamokaj : 대리인은 특정 스레드에서 "시작하도록 설정되지 않았습니다." 사용중인 프레임 워크는 특정 스레드에서 이벤트를 발생시키기로 결정할 수 있지만 기본적으로 더 많은 정보가 없으면 사용자를 도울 수 없습니다. 나는 당신이 더 자세한 내용으로 새로운 질문을하는 것이 좋습니다. –