【问题】
C#中,运行程序,异常:
Additional information: Exception has been thrown by the target of an invocation.
【解决过程】
1.后来,自己去看代码,好像看出问题了。
因为本身此处用的是BackgroundWorker,在completed函数中,用到了e.Result:
private void bgwDownload_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // The background process is complete. We need to inspect // our response to see if an error occurred, a cancel was // requested or if we completed successfully. // Check to see if an error occurred in the // background process. if (e.Error != null) { //MessageBox.Show(e.Error.Message); return; } // Check to see if the background process was cancelled. if (e.Cancelled) { //MessageBox.Show("Cancelled ..."); } else { bNotCompleted_download = false; // Everything completed normally. // process the response using e.Result //MessageBox.Show("Completed..."); gRealReadoutLen = (int)e.Result; } }
但是,由于刚才不小心,在DoWork中,没有赋值e.Result:
private void bgwDownload_DoWork(object sender, DoWorkEventArgs e) { // // The sender is the BackgroundWorker object we need it to // // report progress and check for cancellation. // BackgroundWorker gBgwDownload = sender as BackgroundWorker; 。。。 try { 。。。 do { 。。。 curReadoutLen = binStream.Read(respBytesBuf, curBufPos, (int)expectReadoutLen); if (curReadoutLen > 0) { 。。。 int currentPercent = (int)((currentLength * 100) / totalLength); if (currentPercent < 0) { currentPercent = 0; } if (currentPercent > 100) { currentPercent = 100; } gBgwDownload.ReportProgress(currentPercent); } } while (curReadoutLen > 0); } catch (Exception ex) { realReadoutLen = -1; } //return realReadoutLen; //e.Result = realReadoutLen; gBgwDownload.ReportProgress(100); }
所以,此处,当调用BackgroundWorker的complete时候,即在bgwDownload_RunWorkerCompleted中,会执行到
gRealReadoutLen = (int)e.Result;
而此处e.Result,没有赋值,所以估计是null值,所以去执行:
realReadoutLen = gRealReadoutLen;
才出错的。
所以,去把e.Result加上:
private void bgwDownload_DoWork(object sender, DoWorkEventArgs e) { 。。。 //return realReadoutLen; gBgwDownload.ReportProgress(100); e.Result = realReadoutLen; }
【总结】
是自己不小心,在BackgroundWorker的DoWork中,把e.Result赋值漏掉了,所导致此问题。
加上后,就解决了。
转载请注明:在路上 » 【已解决】C#程序异常:Additional information: Exception has been thrown by the target of an invocation