110,561
社区成员
发帖
与我相关
我的任务
分享
private void button_reg_Click(object sender, EventArgs e)
{
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Thread t1 = new Thread(new ThreadStart(daohang));
t1.Start();
}
public void daohang()
{
webBrowser1.Navigate("https://www.xxxx.com");
Thread.Sleep(2500);
this.webBrowser1.Invoke((MethodInvoker) //核心问题解决的关键代码,在新线程里面委托操控UI线程
(() =>
{
webBrowser1.Document.GetElementById("xxxx").InvokeMember("click");
})
);
}
void all()
{ var a = fun1();
if(a)
{
fun2();
}
else
{
......
}
}
这种程序不会写,怎么扯上高大上的 Sleep 去了呢?
class MyClass
{
private WebBrowser _wb;
//构造函数,实例化时传入WebBrowser实例
public MyClass(WebBrowser wb)
{
_wb = wb;
}
//接下来可以对_wb进行操作
}
//设置控件的CheckForIllegalCrossThreadCalls属性,使之可跨线程操作webbrowser控件
//当然,你还可以通过使用Invoke调用委托
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Thread 任务线程 = new Thread(new ThreadStart(任务方法));
任务线程.Start();
void 任务方法()
{
while(true)
{
//以方法返回的bool判断是否重新执行该方法,下面类似
if (方法1()) break;
}
while(true)
{
if (方法2()) break;
}
.....
while(true)
{
if (方法20()) break;
}
//如果你还要从头再来,这里加个goto跳前面再从方法1开始
}