如何在许多Web浏览器中使用不同的事件

Abd*_*del 0 .net c# browser multithreading winforms

我正在开发一个应用程序,我想创建多个线程,每个线程必须创建一个WebBrowser,每个都WebBrowser使用该方法webBrowser_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");
        }
Run Code Online (Sandbox Code Playgroud)

但如果我想进行多项操作,即在butoon1中我添加:

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

然后去做,我想我必须有几个webbrowser,所以解决方案是为每个操作创建一个线程

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

因此,一个线程创建的每个Web浏览器都必须有自己的方法webBrowser_DocumentCompleted,不要混淆其他Web浏览器的结果.

或者,webBrowser_DocumentCompleted对所有创建的Web浏览器使用相同的方法,但问题是如何指定哪个webbrowser,调用方法webBrowser_DocumentCompleted.

提前致谢

Rud*_*ser 5

很容易,更改方法的名称.

在创建时WebBrowser,可以指定DocumentCompleted任何所需的方法,例如:

firstWebBrowser.DocumentCompleted += firstDocumentCompleted;
secondWebBrowser.DocumentCompleted += secondDocumentCompleted;
thirdWebBrowser.DocumentCompleted += thirdDocumentCompleted;
Run Code Online (Sandbox Code Playgroud)

如果您正在使用设计师,那就简单了.在"事件"选项卡中,只需键入新的(唯一)方法名称即可.

既然你提到了线程,我确实设想了一个问题,如果你没有预先占用你将拥有的Web浏览器(以及事件处理程序)的数量.但是,如果您需要帮助,我们需要更具体的用例示例.