Meine Win RT-Anwendung, die mit VS2012RC auf einer Windows 8 Beta gearbeitet hat, hat jetzt mit den endgültigen Versionen von Visual Studio und Windows 8 Pro das Problem, das Erstellen/Öffnen einer Datei in OnSuspending funktioniert nur, wenn ich einen Debugger-Haltepunkt auf die Dateierstellungsmethode gesetzt habe.StorageFolder.CreateFileAsync stürzt beim Aufruf von 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);
}
}
Wenn ich einen Haltepunkt auf
StorageFile file = await folder.CreateFileAsync(...
gesetzt, geht der Debugger das und wenn ich weiterhin , alles funktioniert gut.Wenn ich jedoch keinen Haltepunkt einstelle, wird die Datei erstellt, aber der Inhalt des XML wird nicht gespeichert (die Datei bleibt leer).
Wenn ich einen Haltepunkt unter der Zeile
StorageFile file = await folder.CreateFileAsync(...
setze, tritt der Debugger nie ein!
Hat jemand eine Idee? Ich habe auch eine Version getestet, die folder.OpenStreamForWriteAsync
verwendet, mit dem gleichen Effekt.
Ist es eventuell nicht möglich, den Vorgang zu beenden? – mydogisbox
@mydogisbox: Es scheint zu. Aber ich weiß nicht warum. Es sieht so aus, als ob der Befehl warten in Save() nicht bis zur Erstellung wartet, sondern sofort (oder nach der Dateierstellung) aus der Speicherfunktion zurückkehrt. Das sehe ich auch, wenn ich nach jedem Methodenaufruf Debug.WriteLine-Aufrufe hinzufüge.Ohne einen Haltepunkt erreicht der Code niemals den Aufruf "var xDox = GetXDocument()". Es wird nach der Dateierstellung zurückgegeben (aber ohne Ausnahme). – HCL