やりたいこと
テキストボックスに入力した文字列をボタン操作で.\example.txtへ書き込む処理を作る。
このとき、書き込む処理をTaskを使って実行する。
特徴
ボタンを押すとラベルに「処理を開始しました。」と表示される。
書き込む処理が別のタスクとして実行される。
入力欄は初期化される。
入力チェックを行うことでボタンの二重操作は無視される。
保存処理が完了する前に別の操作が可能となる。
コード
private async void button1_Click(object sender, EventArgs e)
{
label1.Text = "処理を開始しました。";
Debug.WriteLine("処理を開始しました。");
var txt = textBox1.Text;
if (String.IsNullOrEmpty(txt)) {
MessageBox.Show("入力必須です");
return;
}
Task.Run(async () =>
{
using (StreamWriter reader = new StreamWriter("example.txt"))
{
await reader.WriteLineAsync(txt);
await Task.Delay(3000);
label1.Invoke(() =>
{
label1.Text = "処理が終了しました。";
});
Debug.WriteLine("処理が終わりました。");
}
});
textBox1.Text = "";
return;
}
### 感想
画面がフリーズせず、処理を可視化しながら次の操作を行うことができるためUXに良い影響を与えると思われる。