ダウンロード中UIがフリーズしないように非同期処理にしたつもりです。
ソースコード
namespace HttpDonloadAsyncSample;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var httpClient = new HttpClient();
var picbox = new PictureBox {
Size = new Size(400, 400),
Location = new Point(10, 10),
};
var button1 = new Button {
Size = new Size(100, 30),
Location = new Point(10, 415),
Text = "ダウンロード",
};
Controls.Add(picbox);
Controls.Add(button1);
button1.Click += async (s, e) => {
string uriStr = "https://maywork.net/wp/wp-content/uploads/2023/03/00000-503154271.png";
var response = await httpClient.GetAsync(uriStr);
if (response.StatusCode != System.Net.HttpStatusCode.OK) return;
using var stream = await response.Content.ReadAsStreamAsync();
if (picbox.Image != null) picbox.Image.Dispose();
picbox.Image = Bitmap.FromStream(stream);
};
this.FormClosing += (s, e) => {
httpClient.Dispose();
System.Diagnostics.Debug.Print("Close");
};
}
}
実行
フォームが表示される。
「ダウンロード」ボタンを押す。
画像が表示される。
コメント