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";
            }
        }

C# - 在未完成时显示加载

好的,一点(我希望它是正确的(示例如何使用任务并行库(什么?我喜欢...

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 同步操作的简单方法。