VS2012RCをWindows 8ベータ版で使用していたMy Win RTアプリケーションは、Visual StudioとWindows 8の最終版に問題があり、ファイルの作成/開くOnSuspending内では、デバッガブレークポイントをファイル作成メソッドに設定した場合にのみ機能します。StorageFolder.CreateFileAsyncがApp.OnSuspendingから呼び出されるとクラッシュする
private void OnSuspending(object sender, SuspendingEventArgs e){
var deferral = e.SuspendingOperation.GetDeferral();
if (null != m_document) Save();
deferral.Complete();
}
async void Save(){
var folder = KnownFolders.DocumentsLibrary;
var file = await folder.CreateFileAsync(GetFileName(),Windows.Storage.CreationCollisionOption.ReplaceExisting);
var xDoc = GetXDocument();
using (var stream = await file.OpenStreamForWriteAsync()){
xDoc.Save(stream);
}
}
私は
StorageFile file = await folder.CreateFileAsync(...
にブレークポイントを設定した場合、デバッガが入り、私が継続 場合、すべてが正常に動作します。ただし、ブレークポイントを設定しないと、ファイルが作成されますが、 のxmlの内容は保存されません(ファイルは空のままです)。
以下のブレークポイントをライン
StorageFile file = await folder.CreateFileAsync(...
の下に設定した場合、デバッガは決して入りません!
アイデアはありますか?私はfolder.OpenStreamForWriteAsync
を使ったバージョンもテストしましたが、これと全く同じ効果があります。
操作が完了するまでに時間がかかりますか? – mydogisbox
@mydogisbox:それはそうです。しかし、なぜ私は知らない。 Save()のawaitコマンドが作成まで待たずにすぐに(またはファイルの作成後に)save関数から戻ってくるようです。すべてのメソッド呼び出しの後にDebug.WriteLine-callsを追加すると、これも表示されます。ブレークポイントがなければ、コードは決して "var xDox = GetXDocument()"コールに到達しません。ファイルの作成後に戻ります(例外はありません)。 – HCL