首页新闻找找看学习计划

关于backgroudworker的问题,请高手不吝赐教

0
悬赏园豆:10 [已关闭问题] 关闭于 2011-09-29 17:29
现在有个问题,有两个函数,一个是HtmlDocument对象调用invoke("write",s),其中s是要写在html页面的内容,接着之后htmlwindow对象调用eval("location.reload();")函数,这两句是顺序执行的,但是问题是经常会出现eval()函数执行失败。注意:是偶尔的。有时候也会正常。现在就是想办法确保invoke()函数执行完毕之后再去执行win.eval()这个方法。请高手指点一下,谢谢了。
if (win != null)
{
doc
= (HtmlDocument)win.GetProperty("document");

doc.Invoke(
"write", s);

win.Eval(
"location:reload();");


}
问题补充:

if (win != null)
{
doc
= (HtmlDocument)win.GetProperty("document");
BackgroundWorker bcwk
= new BackgroundWorker();
bcwk.DoWork
+=new DoWorkEventHandler(bcwk_DoWork);
bcwk.RunWorkerAsync();
bcwk.RunWorkerCompleted
+= new RunWorkerCompletedEventHandler(bcwk_RunWorkerCompleted);
}
static void bcwk_DoWork(object sender,DoWorkEventArgs e)
{
// WriteHtml((BackgroundWorker)sender, e);
WriteHtml2();

}
static void bcwk_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
win.Eval(
"location.reload();");
MessageBox.Show(
"方法调用完毕");

}
public static void WriteHtml2()
{

if (doc != null)
{
doc.Invoke(
"write", s);
}
}

public static void WriteHtml(BackgroundWorker worker,DoWorkEventArgs e)
{

if (doc != null)
{
doc.Invoke(
"write", s);
}
}
我用了backgroundworker这个东东,但是好像是不管用,总是提示只能在ui线程上调用此方法。下面是代码

夏天爱上雨的主页 夏天爱上雨 | 初学一级 | 园豆:50
提问于:2011-06-04 08:44
< >
分享
所有回答(1)
0

只能在ui线程调用指的是messagebox吧

另外RunWorkerCompleted  事件应该在RunWorkerAsync()方法调用之前注册

 

 

chouyuu | 园豆:237 (菜鸟二级) | 2011-06-28 11:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册