0

2 つの EventHandler に問題があります。これらは同じように機能するため、1 つを次に示します。

    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 が複数回起動し、停止しないことです。なぜこれを行うのですか?前もって感謝します

4

1 に答える 1

0

あなたが書いたコードはコンパイルされません(あなたStreamWriterのEventHandlerのあなたは何にも割り当てられていません)そしてあなたがこれをどのように呼んでいるかについてのより多くの文脈がなければ、確かに言うのは難しいです。

しかし、最も可能性の高い理由はForm1_Load、複数回呼び出しているが、同じwebBrowserWebsiteオブジェクトを使用していることです。フォームが読み込まれるたびに、新しいイベントハンドラーを追加します。また、イベントハンドラーを削除する場所を示すコードは表示されていないため、Form_Loadを呼び出すたびに1回発生すると思います。

設計によっては、コンストラクターにイベントハンドラーを追加することをお勧めします。これにより、フォームをロードする回数に関係なく、イベントハンドラーが1回だけ追加されます。

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()メソッドの最後で呼び出す必要があります

于 2012-08-30T15:37:35.227 に答える