我有一个winform应用程序,它应该从Web请求中获取数据,当我点击开始按钮时,它可以工作,但是对于那些加载秒,它将不会响应并冻结。 我是一个初学者,我听说有类backgroundbusiness,但我不能让它在我的代码上工作,而不会给我一个类似&#34的错误;你需要在你创建的线程上使用它#" 34。
以下是按钮点击的代码:
WebClient webURL = new WebClient();
Stream stream = webURL.OpenRead(url);
htmlDoc.Load(stream);
HtmlNode chartNode = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='top40']");
listBoxChart.Items.Clear();
foreach (var item in GetChart(chartNode))
{
listBoxChart.Items.Add(item);
}
感谢您的回复!
编辑:
行。这是:
"其他信息:此BackgroundWorker当前正忙,无法同时运行多个任务。" 按钮点击:
void btnGetChart_Click(object sender, EventArgs e)
{
listBoxChart.Items.Clear();
listBoxChart.Items.Add("Please Wait. . .");
listBoxChart.Items.Clear();
backgroundWorker1.RunWorkerAsync();
}
backGroundWorker DoWork :(上面有更多的webrequest代码,但这就是循环):
foreach (var item in GetChart(chartNode))
{
listBoxChart.Items.Add(item);
}
它也说:
"附加信息:跨线程操作无效:Control' listBoxChart'从其创建的线程以外的线程访问。"
答案 0 :(得分:0)
该事件用于编写所有代码DoWork
。您可以将所有代码放在该事件中。调用方法RunWorkerAsync
后,将引发DoWork
事件。完成整个过程后,最后BackgroundWorker
将提出RunWorkerCompleted
事件。您可以在哪里确定该过程已经完成。
有完整的说明示例,您可以找到here