2011-05-06 72 views
1

我有點困惑。與後臺工作者邏輯卡住

我有一個後臺工作者,它的dowork方法關閉並獲得一個pdf文件(byte [])供我打開。當它完成後,在runworker完成的方法中,我創建了我的pdf顯示對象並顯示它。

但是,我要檢查,如果該字節[]是在DoWork的方法無效,如果是去一個新的數據庫位置(這需要一套新方法的調用來得到不同的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

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

感謝

回答

3

嗯,DoWork的方法在後臺線程已經運行。你爲什麼不繼續在那裏做所有的工作?當DoWork方法完成時,無論如何,回調都會觸發。

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

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

我沒有看到任何需要啓動另一個線程只爲第一個返回爲null的情況。如果第一次失敗,請調用第二次獲取方法。

0

您是否可以檢查DoWork線程中的PDF是否爲空,如果是,則切換數據庫並再次加載PDF?

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