簡體   English   中英

異常System.Reflection.TargetInvocationException - Backgroundworker

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM