我有一些代码如下。这是在“线程 2”上运行的
WebBrowser browser = this.webBrowser
browser.Invoke(new MethodInvoker(delegate { browser.Document.GetElementById("somebutton").InvokeMember("click"); }));
Thread.Sleep(500);
browser.Invoke(new MethodInvoker(delegate { browser.Document.GetElementById("username").SetAttribute("value", username); }));
//folowed by several more similar statments
本质上,我正在调用在不同线程“线程 1”上创建的 WebBrowser 控件上的一些方法。
如果在浏览器中加载的当前页面上的元素不包含元素“somebtn”或“username”,则从“Thread 1”抛出异常。
有没有办法在“线程 2”上捕获该异常?我知道我可以在代表中使用 try catch,并有一个特殊的代表返回一些值(如异常),但是有没有办法绕过这些选项?
注意*:我需要 Thread.Sleep,因为特定页面需要某些事件之间的一些延迟。如果有某种方法可以将这些事件组合成一个委托(同时保留某种形式的非阻塞延迟),我认为这可以工作,我只需将它们全部包装在单个 try catch 中并创建一个返回异常的委托.