我的两个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多次触发,它不会停止! 它为什么这样做? 提前致谢
答案 0 :(得分:0)
您编写的代码将无法编译(您的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()