【发布时间】:2014-08-10 01:09:35
【问题描述】:
我有一个 winform 应用程序,它应该从 web 请求中获取数据,当我点击开始按钮时它可以工作,但是在加载的那几秒钟内它不会响应并冻结。 我是一个初学者,我听说有类 backgroundWorker 但我不能让它在我的代码上工作而不给我一个错误,比如“你需要在你创建的线程上使用它”。
这里是按钮点击的代码:
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);
}
它还说:
“附加信息:跨线程操作无效:控件'listBoxChart'从创建它的线程以外的线程访问。”
【问题讨论】:
-
如果您不知道如何使用
BackgroundWorker,您应该阅读众多在线教程之一。如果您知道如何使用但遇到错误,您需要发布代码并告诉我们您遇到了什么错误。您不应该做的是让互联网上的人编写您的代码,然后在不理解的情况下将其放入您的应用程序中。
标签: multithreading winforms backgroundworker