2011-05-06 8 views
1

조금 혼란 스럽습니다.배경 작업자 논리가 붙어 있습니다.

나는 dowork 메소드에서 벗어나 pdf 파일 (byte [])을 열어주는 배경 작업자가 있습니다. 완료되면, runworker 완료 방법에서 나는 내 PDF 디스플레이 개체를 만들고 그것을 표시합니다.

그러나,이 바이트 []는 dowork 방법의 null 여부를 확인하려면, 그래서 새 데이터베이스 위치로 이동하는 경우

(방법의 새로운 세트를 요구하는 것은 다른 PDF를 얻기 위해 호출) 나는 실제로 이것을 어떻게 할 수 있는지 알지 못한다. (백그라운드 작업자 내에서 새로운 배경 작업자를 스폰하는 것 말고 다른 것 - 가능하다면 :) :)

여기에 내가 지금 가지고있는 코드 설정이있다. 문제가있어서

byte[] pdf; 
    void method_DoWork(object sender, DoWorkEventArgs e) 
    { 

     pdf = myObject.getPdf(); 

    } 

    void method_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     if (pdf!= null) 
     { 
      displayPdf(pdf); 
     } 
     else 
     { 
      goAndGetAnotherPDF(); 
     } 

    } 

분명히 대신 dowork 메서드에서 null을 확인할 수 있습니다. 이

V를

답변

3

글쎄의 DoWork 방법은 이미 백그라운드 스레드에서 실행되는

oid method_DoWork(object sender, DoWorkEventArgs e) 
if(pdf != null) 
{ 
    callRunWorkerCompleted() 
} 
else 
{ 
    doSomeOtherStuffAndStoreInLocalVariables(); 
} 

감사 말에서 어쨌든입니다. 그냥 계속해서 거기서 모든 일을하지 그래? DoWork 메소드가 완료되면, 어떻게 호출 되든 콜백이 실행됩니다.

void method_DoWork(object sender, DoWorkEventArgs e) 
{ 
    pdf = myObject.getPdf(); 

    if (pdf == null) 
    { 
     pdf = SomeOtherGetMethod(); 
    } 
} 

난 그냥 첫 복귀가 null 인 경우에 다른 스레드를 실행 할 필요가 표시되지 않습니다. 첫 번째 실패 할 경우 두 번째 fetch 메서드를 호출하면됩니다.

0

DoWork 스레드에서 PDF가 null인지 확인하고, 그렇다면 데이터베이스를 전환하고 pdf를 다시로드 할 수 있습니까?

void method_DoWork(object sender, DoWorkEventArgs e) 
    { 
     pdf = myObject.getPdf(); 
     if(pdf == null) 
     { 
     //Switch database or whatever and call again 
     pdf = myObject.getPdf(); 
     } 
    }