0

我正在开发一个应用程序,我想创建多个线程,每个线程必须创建一个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");
}

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

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

那就去做吧,我想我必须有几个webbrowser,所以解决方法是为每个操作创建一个线程

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

因此,线程创建的每个 Web 浏览器都必须有自己的方法webBrowser_DocumentCompleted,以免与其他 Web 浏览器的结果混淆。

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

4

1 回答 1

0

你没有在你的线程中创建几个网络浏览器,你仍然只是在使用你没有告诉我们的地方创建的一个。

尝试在 methode 函数中实际创建 webbrowser 对象

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

public void methode1()
        {
            System.Windows.Forms.WebBrowser wBrowser = System.Windows.Forms.WebBrowser();
            wBrowser.DocumentCompleted +=webBrowser_DocumentCompleted;
            wBrowser.Navigate("http://www.test.com");
            a = 1;
        }

另外,您知道您可以在一个 if 语句中检查 a 的两个值,对吗?

if(a==1 || a==2)
     methode2(wb); 
于 2013-02-26T15:08:52.440 回答