事件处理程序被多次激发



我的两个EventHandler有问题,它们工作相同,所以这里有一个:

    private void Form1_Load(object sender, EventArgs e)
    {
        webBrowserWebsite.Url = new System.Uri(textBoxURL.Text, System.UriKind.Absolute);
        webBrowserWebsite.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowserWebsite_DocumentCompleted);
    }

    void webBrowserWebsite_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
            StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"CurrentData.wfd");
            sw.Write(webBrowserWebsite.Document.Body.InnerText);
            sw.Close();
    }

问题是,EventHandler多次触发,它不会停止!它为什么要这么做?提前感谢

您编写的代码不会编译(EventHandler中的StreamWriter没有分配给任何东西),如果没有更多关于如何调用它的上下文,很难说。

但最可能的原因是您多次调用Form1_Load,但使用相同的webBrowserWebsite对象。每次加载表单时,都会添加一个新的事件处理程序。由于您没有显示任何代码来显示删除事件处理程序的位置,我猜每次调用Form_Load时都会触发一次。

根据您的设计,最好在构造函数中添加事件处理程序,这样无论加载表单的次数如何,它都只添加一次

public Form1()
{
    webBrowserWebsite.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowserWebsite_DocumentCompleted);
}
private void Form1_Load(object sender, EventArgs e)
{
    webBrowserWebsite.Url = new System.Uri(textBoxURL.Text, System.UriKind.Absolute);
}

或者删除事件处理程序中的事件处理程序:

void webBrowserWebsite_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"CurrentData.wfd");
    sw.Write(webBrowserWebsite.Document.Body.InnerText);
    sw.Close();
    webBrowserWebsite.DocumentCompleted -= webBrowserWebsite_DocumentCompleted;
}

此外,由于StreamWriter实现了IDisposible,您应该将其放在using块中,或者至少在方法的末尾调用sw.Dispose()

相关内容

  • 没有找到相关文章

最新更新