C# - 在未完成时显示加载
本文关键字:显示 加载 完成时 未完成 | 更新日期: 2023-09-27 18:34:58
在我的C#应用程序中,我通过读取HTML页面并解析其中的一些链接并将它们放入richTextBox(目前(来启动程序。但问题是,因为它必须读取链接,所以需要一些时间,所以当我启动程序时,大约需要 5 秒才能显示表单。我想做的是立即显示表单,并显示加载光标或禁用的 richTextBox。我该怎么做呢?以下是发生的情况的示例:
public Intro()
{
InitializeComponent();
WebClient wc = new WebClient();
string source = wc.DownloadString("http://example.com");
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(source);
var nodes = doc.DocumentNode.SelectNodes("//a[starts-with(@class, 'url')]");
foreach (HtmlNode node in nodes)
{
HtmlAttribute att = node.Attributes["href"];
richTextBox1.Text = richTextBox1.Text + att.Value + "'n";
}
}
好的,一点(我希望它是正确的(示例如何使用任务并行库(什么?我喜欢...
public Intro()
{
InitializeComponent();
richTextBox1.IsEnabled = false;
Task.Factory.StartNew( () =>
{
WebClient wc = new WebClient();
string source = wc.DownloadString("http://example.com");
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(source);
var nodes = doc.DocumentNode.SelectNodes("//a[starts-with(@class, 'url')]");
return nodes;
}).ContinueWith( result =>
{
richTextBox1.IsEnabled = true;
if (result.Exception != null) throw result.Exception;
foreach (var node in result.Result)
{
HtmlAttribute att = node.Attributes["href"];
richTextBox1.Text = richTextBox1.Text + att.Value + "'n";
}
}, TaskScheduler.FromCurrentSynchronizationContext());
}
我建议使用后台工作者。(有关详细信息,请参阅 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx(。执行 A 同步操作的简单方法。