2015-11-17 71 views
0

我的背景工作者應該返回百分比,也是一個對象。 其結構。c#backgroundworker reportProgress返回百分比和Struct

serialPort.DiscardInBuffer(); // clear InBuffer 
serialPort.Write(adv_request, 0, 3); // Write byte array to serial port, with no offset, all 3 bytes 
process_DoWork(serialPort); 
worker.ReportProgress(0, pfc_parsedData); //return parsed data to main thread 

在這裏,我得到一個異常「System.InvalidCastException」

public void request_ProgressChanged(object sender, ProgressChangedEventArgs e) //this function is need update mainthread controls 
{ 
    if (e.ProgressPercentage == 0) 
    { 
     sbStatus.Text = "Logging active..."; 
     Pfc_parsedData pfc_parsedData = (Pfc_parsedData)sender; 
    } 
    else 
    { 
     sbStatus.Text = "Offline"; 
    } 
} 

回答

2

sender是後臺工作,而不是你報告進度時提供的數據。該數據在e.UserState

+0

我試過這個,但是這也拋出一個異常:'Pfc_parsedData pfc_parsedData = new Pfc_parsedData(); pfc_parsedData =(Pfc_parsedData)e.UserState;'System.NullReferenceException –

+0

@BastiAn然後,你需要弄清楚什麼是你試圖解引用的null,或者找出爲什麼它是空的,當你認爲它不是,否則當它爲空時,你不需要解引用它。 – Servy

+0

@BastiAn你不需要創建一個'Pfc_ParsedData'的新實例。 'Pfc_parsedData pfc_parsedData =(Pfc_parsedData)e.UserState;'應該工作。 –