0

BaseOperation 클래스에서 상속하는 개체가 몇 개 있습니다. 이러한 함수에는 IntializeOperation, SignOnOperation, SignOffOperation 등이 있습니다.WP7 두 개의 BackgroundWorker 개체에 대해 하나의 RunWorkerCompleted 이벤트 발생

BaseOperation 클래스에는 서비스 호출을 포함하여 TaskWorker를 사용하여 작업을 수행하는 Execute() 메서드가 있습니다. 이것이 아마 최고의 디자인이 아니라는 것을 알지만, 지금 당장 제가 작업하고있는 것으로, 재 설계가 현재 실현 가능하지 않습니다. 다음은 클래스의 단순화 된 버전입니다.

public void AsyncExecute() 
{ 
    _result = DoOperation(); 
} 

public void Execute() 
{ 
    _worker = new BackgroundWorker(); 
    _worker.WorkerReportsProgress = false; 

    _worker.DoWork += (s, e) => 
    { 
     AsyncExecute(); 
    }; 

    _worker.RunWorkerCompleted += (s, e) => 
    { 
     //Tell our callback what we've done 
     if (_result is Exception) 
      Failed(_result as Exception); 
     else 
      Succeeded(_result); 
    }; 

    _worker.RunWorkerAsync(); 
} 

하나의 작업을 호출하면 올바르게 작동합니다. 그러나 두 개의 운영을 빠르게 연속해서 호출하면 문제가 발생합니다.

첫 번째 작업이 완료되면 RunWorkerCompleted가 각 작업마다 두 번 호출됩니다. RunWorkerCompleted 델리게이트 내부에서 브레이크 포인트를 수행 할 수 있기 때문에 두 번 치고, 어떤 작업을 호출 할 때마다 다른 작업을 수행하는지 확인할 수 있습니다. 2 번째 작업의 DoOperation() 메서드에서 중단 점을 지정하여 RunWorkerCompleted 이벤트가 해당 작업에 대해 실행 된 후에도 계속 실행되는지 확인할 수 있습니다.

첫 번째 작업 만 완료되면 RunWorkerCompleted 이벤트가 두 작업에 모두 발생하는 이유를 파악하는 데 문제가 있습니다.

+0

"실행"에 잘못된 이름을 사용했습니다. "BeginExecute"여야합니다. –

+0

왜 그런가요? 코드가 올바르게 작동합니다. 나는 그것이 무엇인지 불리는 것이 중요하다고 생각하지 않는다. SignOffOperation.Execute()와 같이 사용합니다. – CACuzcatlan

답변

0

문제점을 파악했습니다. DoOperation() 메서드에서 ManualResetEvent를 사용하고 있습니다. 동시에 두 가지 작업이 진행되는 경우 모든 작업이 완료된 것입니다.

관련 문제