加载指示器Windows窗体

本文关键字:窗体 Windows 指示器 加载 | 更新日期: 2023-09-27 18:10:37

我有三个表单:

  1. 登录表单
  2. 浏览用户表单
  3. 用户配置文件

和一些类:

    用户
  1. 文章
  2. 应用

所以,我的表单创建与重载构造函数。其中之一是:

public UserProfile(User user)
    {
        InitializeComponent();
        Show();
        pictureBox2.Load("https://d13yacurqjgara.cloudfront.net/users/34535/screenshots/631316/loader_gif.gif");
        string aJSON = @client.DownloadString(App.HOST + "api/get_user_articles?e=" + App.EMAIL + "&p=" + App.PASSWORD + "&u=" + user.id.ToString());
        articles = JsonConvert.DeserializeObject<List<Article>>(aJSON);
        listView1.View = View.LargeIcon;
        imageList1.ImageSize = new Size(32, 32);
        int i = 0;
        foreach (var article in articles)
        {
            ListViewItem aView = new ListViewItem(article.theme);
            string aUrl = client.DownloadString(App.HOST + "api/get_article_image?a=" + article.id);
            if (!aUrl.StartsWith("https://"))
            {
              aUrl = App.HOST + "assets/fallback/default_article-f8a3a64f38bb9b0d777f6722ab64ca0c.png";
            }
            byte[] imageData = client.DownloadData(aUrl);
            MemoryStream stream = new MemoryStream(imageData);
            Image img = Image.FromStream(stream);
            stream.Close();
            imageList1.Images.Add(img);
            aView.ImageIndex = i;
            listView1.Items.Add(aView);
            i++;
        }
    }

这段代码是从远程服务器加载图片和文章。这是一个非常长期的过程。我需要在窗口显示和窗口完全加载之间创建一些延迟加载效果。在此之前,我试图在表单的顶部创建PictureBox,并在完成加载时将其发送到底部。但是它不起作用,因为表单在下载数据时处于睡眠模式。请写出一些问题的解决方案!谢谢你!

加载指示器Windows窗体

图片的加载必须在另一个线程中执行。

你可以使用BackgroundWorker,这里有一个教程:http://www.dotnetperls.com/backgroundworker