WPF(.NET Core 3.1)で、以下のソースコードのように、TestButtonをクリックしたら10個のテキストファイルを作成したいとします。
その途中でアプリケーションが終了された場合に、全てのテキストファイルの作成まで待ってから終了したい場合にはどのようにするのが良いのでしょうか?
OnClosingイベントで完了まで待てば良いと思ったのですが、ロックしてしまってうまくいきませんでした。
C#
1using System.ComponentModel; 2using System.Diagnostics; 3using System.IO; 4using System.Text; 5using System.Threading.Tasks; 6using System.Windows; 7 8namespace WpfApp1 9{ 10 public partial class MainWindow : Window 11 { 12 public MainWindow() 13 { 14 InitializeComponent(); 15 } 16 17 private Task task; 18 19 private async void TestButton_OnClick(object sender, RoutedEventArgs e) 20 { 21 task = WriteAllAsync(); 22 await task; 23 task = null; 24 } 25 26 /// <summary> 27 /// 10個のファイルを生成 28 /// </summary> 29 private async Task WriteAllAsync() 30 { 31 for (var i = 0; i < 10; i++) 32 { 33 await WriteAsync(i); 34 } 35 } 36 37 /// <summary> 38 /// ファイルを生成 39 /// </summary> 40 private async Task WriteAsync(int index) 41 { 42 Debug.WriteLine($"{index}: Start"); 43 await using var streamWriter = new StreamWriter($"test{index}.txt", false, Encoding.UTF8); 44 for (var i = 0; i < 100000; i++) 45 { 46 await streamWriter.WriteLineAsync($"{i}"); 47 } 48 49 Debug.WriteLine($"{index}: End"); 50 } 51 52 private void MainWindow_OnClosing(object sender, CancelEventArgs e) 53 { 54 while (task != null) 55 { 56 //await Task.Delay(100); 57 } 58 } 59 } 60}
回答1件
あなたの回答
tips
プレビュー