加载指示器Windows窗体

时间:2014-06-26 18:07:13

标签: c# .net winforms foreach

我有三种形式:

  1. 登录表格
  2. 浏览用户表单
  3. 用户个人资料
  4. 还有一些课程:

    1. 用户
    2. 文章
    3. 应用
    4. 因此,我的表单是使用重新加载的构造函数创建的。其中之一是:

      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,并在完成加载后将其发送到底部。但它不起作用,因为下载数据时表单处于睡眠模式。请写一些问题解决方案!谢谢!

1 个答案:

答案 0 :(得分:2)

图片的加载必须在另一个帖子中进行。

您可以使用BackgroundWorker,这是一个教程:http://www.dotnetperls.com/backgroundworker