私はショッピング用のWindowsストアアプリを持っています。エラーを管理するLogfileを作成しました。しかし、ファイルにデータを追加するときにエラーが発生することがあります。Windowsストアアプリで文字列をファイルに追加するにはどうすればよいですか?
が public static async void logError(string pagename, string functionname, string errordescription)
{
try
{
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.CreateFileAsync("errorLog.txt", CreationCollisionOption.OpenIfExists);
await FileIO.AppendTextAsync(file, string.Format("{0}Date: {1} \t PageName: {2} \t FunctionName: {3} \t ErrorDescription: {4}", Environment.NewLine, DateTime.Now, pagename, functionname, errordescription));
}
catch (Exception)
{
throw;
}
}
それは数行を書きますが、いくつかの時間の後に、それは次のエラーをスロー: アクセスが拒否されました
は、ここに私のコードです。 (HRESULTからの例外:0x80070005(E_ACCESSDENIED))
このエラーが発生する理由はありません。誰でも私にこれを解決する方法を提案できますか?
'async void'は、イベントハンドラまたは同様の関数にのみ使用する必要があります。そうしないと、メソッドが終了したことを検出できません。以前の呼び出しが実行されている間にファイルに書き込もうとした可能性があります。署名を 'async Task'に変更し、' await LogError ... 'のようなログメソッドを待ちます。いずれにせよ、コールスタックを含む完全な例外を投稿してください。 'Exception.ToString()'を呼び出すことでこれを得ることができます。 –
@PanagiotisKanavosはい、ときどき最後の呼び出しが実行されていても書き込みを呼び出すことがあります。どうすれば "非同期タスク"を扱うかについてのリンクやアイディアを教えてください。 – Nikki
@PanagiotisKanavos呼び出し中にLogErrorを "待つ"場合、この呼び出しを含むすべてのメソッドのシグネチャに "async"を追加する必要があります。 LogErrorの呼び出しは、ほとんどのメソッドのtry-catchにあります。すべてのメソッドに "async"を追加するのは良いですか? –