0

私はアプリケーションに取り組んでおり、複数のスレッドを作成したいと考えています。各スレッドは を作成する必要があり、これらはWebBrowserすべてメソッドを使用します。WebBrowserwebBrowser_DocumentCompleted

作成された各インスタンスが、すべてのインスタンスで同じメソッドではなく、WebBrowser独自のDocumentCompletedハンドラーを持つにはどうすればよいでしょうか。webBrowser_DocumentCompleted

私は説明する :

場合によっては、単一の Web ブラウザーでの操作

int a = 0;
private void button1_Click(object sender, EventArgs e)
        {
            methode1();
        }
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (a == 1) methode2(wb);
            if (a == 2) methode2(wb);
        }

public void methode1()
        {
            webBrowser.Navigate("http://www.test.com");
            a = 1;
        }
public void methode2()
        {
            HtmlElement txt1 = webBrowser1.Document.GetElementById("tesxtbox1");
            txt1.SetAttribute("value", "test");
            webBrowser.Document.Forms[0].InvokeMember("submit");
            a = 2;
        }
public void methode3()
        {
            webBrowser.Navigate("http://www.test3.com");
        }

しかし、複数の操作を行いたい場合、つまり butoon1 に次を追加します。

private void button1_Click(object sender, EventArgs e)
        {
            for(int i=0; i<5  ;i++)
            methode1();
        }

それを行うには、いくつかのWebブラウザーが必要だと思うので、解決策は操作ごとにスレッドを作成することです

private void button1_Click(object sender, EventArgs e)
        {
            for(int i=0; i<5  ;i++)
            {
                Thread thread = new Thread(new ThreadStart(methode1));
                thread.Start();
            }   
        }

webBrowser_DocumentCompletedそのため、スレッドによって作成された各 Web ブラウザーには、他の Web ブラウザーの結果と混同しないように、独自のメソッドが必要です。

または、作成されたすべての Web ブラウザーに対して同じメソッドを使用しwebBrowser_DocumentCompletedますが、問題は、どの Web ブラウザーを指定するか、メソッド webBrowser_DocumentCompleted を呼び出す方法です。

前もって感謝します

4

1 に答える 1

5

非常に簡単に、メソッドの名前を変更できます。

を作成するときに、次のように、任意のメソッドにWebBrowser割り当てることができます。DocumentCompleted

firstWebBrowser.DocumentCompleted += firstDocumentCompleted;
secondWebBrowser.DocumentCompleted += secondDocumentCompleted;
thirdWebBrowser.DocumentCompleted += thirdDocumentCompleted;

デザイナーを使用している場合、それは同じように簡単です。[イベント]タブで、新しい(一意の)メソッド名を入力するだけです。

スレッド化について言及したので、使用するWebブラウザー(したがってイベントハンドラー)の数を先取りしない場合、1つの問題を想定します。ただし、サポートが必要な場合は、より具体的なユースケースの例が必要です。

于 2013-02-26T12:39:30.477 に答える