将参数传递给WebBrowserDocumentCompleted函数

3

假设我有一个如下的函数:

public TestStuff() {

    string testing = "test";
    webBrowser2.Navigate("http://google.com");
    webBrowser2.DocumentCompleted += WebBrowserDocumentCompleted;

}

public WebBrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs Url) {

    MessageBox.Show(testing);
}

我应该如何将测试传递给WebBrowserDocumentCompleted函数?在语法上,我不确定如何将其作为参数添加。

2个回答

3

通过利用闭包轻松实现

public void TestStuff() 
{
    string testing = "test";
    webBrowser2.DocumentCompleted += (s, e) =>
        {
            MessageBox.Show(testing);
        };
    webBrowser2.Navigate("http://google.com");
}

在格式和可读性方面,将DocumentCompleted放在Navigate调用之前是正确的吗? - sir_thursday
好的。还有一个问题,整个TestStuff()函数都在while循环内部,因此它会中断我的Navigate()调用,因为它是异步的。我应该将整个while循环放在单独的线程中,还是您可以指向一个可能更好地解释线程/后台工作的资源?谢谢。 - sir_thursday
在此之前,我正在使用此问题上的答案来帮助我:http://stackoverflow.com/questions/17816553/while-loop-program-flow?rq=1 - sir_thursday
1
@Hubrid,你很幸运,因为我今天已经回答了一个类似的问题。http://stackoverflow.com/questions/18273762/convert-html-page-to-a-image-using-webbrowser-in-asp-net-taking-too-much-time-to/18274404#18274404 - I4V

0

试试这个

   public TestStuff()  
   {
        string testing = "test";
        webBrowser2.DocumentCompleted += ((WebBrowserDocumentCompletedEventArgs)delegate(object sender, EventArgs args)
        {
             evHandler(sender, testing);
        });
        webBrowser2.Navigate("http://google.com");

    }

   public void evHandler(Object sender, string testing)
   { 
         MessageBox.Show(testing);
   }

除了使用老式的委托,我的答案与其他答案有什么不同?顺便说一句:在调用“Navigate”之前,您应该附加到“DocumentCompleted”。 - I4V
另外,第二个参数应该是类型为“WebBrowserDocumentCompletedEventArgs”,而不是“EventArgs”。 - I4V
在C#中,方法名以大写字母开头作为惯例。 - EZI
@QtX 哇..我从来没有真正听说过那个。 - Ayomide-Pt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接