加载指示器Windows窗体
本文关键字:窗体 Windows 指示器 加载 | 更新日期: 2023-09-27 18:10:37
我有三个表单:
- 登录表单
- 浏览用户表单
- 用户配置文件
和一些类:
- 用户文章
- 应用
所以,我的表单创建与重载构造函数。其中之一是:
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
,并在完成加载时将其发送到底部。但是它不起作用,因为表单在下载数据时处于睡眠模式。请写出一些问题的解决方案!谢谢你!
图片的加载必须在另一个线程中执行。
你可以使用BackgroundWorker,这里有一个教程:http://www.dotnetperls.com/backgroundworker