【发布时间】:2013-05-23 19:13:37
【问题描述】:
所以基本上我想在互联网上检索 .txt 文件的内容并将其写入 a 标签。但是,虽然这样做,Windows 窗体会冻结。
所以我想把它放到BackgroundWorker中。还有一个进度条,应该在进度期间填充。我的代码如下所示:
private void RetrieveTxt(string currentversion)
{
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
WebClient wc = new WebClient();
label1.Text = wc.DownloadString("http://example.org/version.txt");
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
updateProgress.Value = e.ProgressPercentage;
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
updateProgress.Visible = false;
}
但是,它不起作用;标签永远不会更新,进度条保持空白。
感谢您的帮助,谢谢! :)
【问题讨论】:
-
如果你在 .Net 4.5 上,你可以使用 async/await
-
如果你使用的是 BackgroundWorker,你需要这样做:worker.RunWorkerAsync();
-
并且...记住不要修改
DoWork代码中的任何 UI 对象,否则您将收到一个很好的异常。为此,您拥有ProgressChanged。
标签: c# backgroundworker webclient downloadstring