UWPアプリケーションで、CSVファイルをリードして画像のパスを取得し、その画像ファイルを指定のフォルダにコピーする処理を行うアプリケーションを作成しています。
UWPの場合、ファイル処理にFileStreamなどを使用する方法ではうまくいかなかったため、StorageFileクラスを用いたファイル処理を行うことにより関数を実装しています。
しかし、StorageFile関数が非同期処理のため、それを用いるメソッドも非同期で作成されることになります。
現状、下記のような関数を作成しています
Read関数
C#
1public async Task Read(StorageFile file) 2{ 3 var buff = FileIO.ReadBufferAsync(file); 4 Encoding.Registerprovider(CodePagesEncodingProvider.Instance); 5 var enc = Encoding.GetEncoding("Shift_JIS"); 6 lines = enc.GetString(buff.ToArray()).Split('\n'); 7 (CSVからファイル名を取り出す処理) 8}
CopyFile関数
C#
1public async Task<bool> CopyFile() 2{ 3 foreach (ファイルの数だけ繰り返す) 4 { 5 inputFile = await StorageFile.GetFileFromPathAsync(入力ファイル名); 6 targetFolder = await StorageFolder.GetFolderFromPathAsync(出力先); 7 8 try 9 { 10 出力ファイル = await inputFile.CopyAsync(targetFolder); 11 } 12 catch (Exception) 13 { 14 ret = false; 15 } 16 } 17 return ret; 18}
ReadとCopyFileの呼び出し
C#
1private async Task<bool> ReadFile(StorageFile file) 2{ 3 bool ret; 4 Task task = Read(file); 5 task.Wait(); // これを入れるとReadの処理から戻らない。入れないと後のCopyFileがReadを待たずに実行される。 6 await CopyFile(); 7 return true; 8}
この状態でやりたいことはRead関数の呼び出しの後、CopyFileを呼び出したいのですが、非同期処理のためCopyFileがReadの終了を待たずに実行されます。
taskのWaitでReadの実行を待つという方法を試みましたが、Waitに入ったまま戻らなくなりました。
うまい処理方法はあるでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/03/05 00:55
2019/03/05 01:33
退会済みユーザー
2019/03/05 02:13
2019/03/05 02:15
退会済みユーザー
2019/03/05 02:21
2019/03/05 02:32
2019/03/05 02:34
退会済みユーザー
2019/03/05 02:47
2019/03/05 02:54
退会済みユーザー
2019/03/05 04:04