继续昨天的帖子。。
昨天的基本解决,可多线程同时抓取不同网站不同页面下的学生登录网页信息,并返回验证码
可是带来的新的问题,再抓回来后,我却不能继续操作这个webbrowser了,看了下帖子,说wb只能STA模式,这个通过委托可以解决么?现在增加的代码是
//用来登录的按钮
private void button2_Click(object sender, EventArgs e)
{
if (textBox21.Text != "")//输入的验证码
{
if (pictureBox11.Image != null)//验证码图像
{
button1.Enabled = false;
r1 = new Thread(new ThreadStart(do_login_1));
r1.IsBackground = true;
r1.Name = "登陆线程";
r1.SetApartmentState(ApartmentState.STA);
r1.Start();
}
else
{
MessageBox.Show("请等验证码出来后再操作,谢谢~", "请稍等");
}
}
}void do_login_1()
{
WebBrowser my = webBrowser1_查询网站1;
my.AllowNavigation = true;
my.ScriptErrorsSuppressed = true;//就是这里开始出错,提示COM object that has been separated from its underlying RCW cannot be used.
System.Windows.Forms.HtmlDocument mydocument = my.Document;//这里也是。。
if (mydocument == null)
{
return;
}
#region 登录部分
do_something()
#endregion
}
出错提示COM object that has been separated from its underlying RCW cannot be used.
查看了一下,貌似必须改成mta模式,但是改了后wb就不支持多线程了嘛,这个问题怎么解决呢?委托可以解决么?还是我一开始就该用委托模式操作wb?怎样才可以让这个wb一直是主窗口模式,线程只是不断的去访问,继续更新之类的呢?wb和登录按钮的窗口在一个form里,但是在不同的tabcontrol中,如果放到一个里面,貌似也没有帮助是不是?
vs2010,winform 分不够可以再给嘛,大大们帮帮忙哈。。
昨天的基本解决,可多线程同时抓取不同网站不同页面下的学生登录网页信息,并返回验证码
可是带来的新的问题,再抓回来后,我却不能继续操作这个webbrowser了,看了下帖子,说wb只能STA模式,这个通过委托可以解决么?现在增加的代码是
//用来登录的按钮
private void button2_Click(object sender, EventArgs e)
{
if (textBox21.Text != "")//输入的验证码
{
if (pictureBox11.Image != null)//验证码图像
{
button1.Enabled = false;
r1 = new Thread(new ThreadStart(do_login_1));
r1.IsBackground = true;
r1.Name = "登陆线程";
r1.SetApartmentState(ApartmentState.STA);
r1.Start();
}
else
{
MessageBox.Show("请等验证码出来后再操作,谢谢~", "请稍等");
}
}
}void do_login_1()
{
WebBrowser my = webBrowser1_查询网站1;
my.AllowNavigation = true;
my.ScriptErrorsSuppressed = true;//就是这里开始出错,提示COM object that has been separated from its underlying RCW cannot be used.
System.Windows.Forms.HtmlDocument mydocument = my.Document;//这里也是。。
if (mydocument == null)
{
return;
}
#region 登录部分
do_something()
#endregion
}
出错提示COM object that has been separated from its underlying RCW cannot be used.
查看了一下,貌似必须改成mta模式,但是改了后wb就不支持多线程了嘛,这个问题怎么解决呢?委托可以解决么?还是我一开始就该用委托模式操作wb?怎样才可以让这个wb一直是主窗口模式,线程只是不断的去访问,继续更新之类的呢?wb和登录按钮的窗口在一个form里,但是在不同的tabcontrol中,如果放到一个里面,貌似也没有帮助是不是?
vs2010,winform 分不够可以再给嘛,大大们帮帮忙哈。。
你可以用非托管代码来写……