[英]Exception System.Reflection.TargetInvocationException - Backgroundworker
我正在嘗試使用backgroundworker(bgFileOpener)將openFileDialog打開的文件讀入richTextBox(稱為websiteInput_rtxt)。
private void bgFileOpener_DoWork(object sender, DoWorkEventArgs e)
{
try
{
foreach (var file in openFileDialog1.FileNames)
{
using (StreamReader sreader = new StreamReader(file))
{
// while the stream reader didn't reach the end of the file - read the next line and report it
while (!sreader.EndOfStream)
{
if (bgFileOpener.CancellationPending)
{
e.Cancel = true;
return;
}
bgFileOpener.ReportProgress(0, sreader.ReadLine() + "\n");
Thread.Sleep(15);
}
}
}
}
catch (Exception) { }
}
private void bgFileOpener_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
websiteInput_rtxt.AppendText(e.UserState.ToString());
}
當表格在bgWorker仍在運行時關閉時,會拋出一個似乎沒有被捕獲的異常 ,有人可以告訴我缺少什么或可能導致異常的原因嗎?
異常消息稱為“System.Reflection.TargetInvocationException”,而innerException則表示有關RichTextBox的內容。
關閉表單不會立即停止后台工作程序,這意味着您的ProgressChanged
事件仍然可以在窗體關閉后在表單上引發。
你可以解決這個問題:
private void bgFileOpener_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (this.IsDisposed) // Don't do this if we've been closed already
{
// Kill the bg work:
bgFileOpener.CancelAsync();
}
else
websiteInput_rtxt.AppendText(e.UserState.ToString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.