Windows 8 problem z zamknięciem strumieni

0

Witam.
Piszę aplikacje Windows Store dla Windows 8, która wczytuje i zapisuje dane do pliku XML. Niestety mam pewien problem. Po otwarciu aplikacji dane się ładnie wczytują, następnie próbuję zapisać jakieś zmiany do pliku i to również się udaje, niestety ponowne załadowanie danych z pliku już nie. Wyskakuje mi wyjątek 'System.UnauthorizedAccessException'. Wydaje mi się że problemem jest to, że nie można zamknąć poprawnie strumieni. Szukałem sporo informacji w internecie, ale bez rezultatu. Tutaj jest opisany podobny problem: http://www.damirscorner.com/ClosingStreamsInWinRT.aspx. Proszę o pomoc.
Funkcja wczytująca dane:

public static async void LoadTravels()
        {
            TravelList = new ObservableCollection<Travel>();
            StorageFolder defaultFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

            var file = await defaultFolder.GetFileAsync("data.xml");
            using (IInputStream inStream = await file.OpenAsync(FileAccessMode.Read))
            {
                XDocument xml = XDocument.Load(file.Path);
                //ładowanie danych z XML
                //...
                
            }
        }

Funkcja zapisująca dane:

public static async void SerializeToXML(ObservableCollection<Travel> list)
{
            //Serialization
            StorageFolder folder = ApplicationData.Current.LocalFolder;
            StorageFile file = await folder.CreateFileAsync("data.xml", CreationCollisionOption.ReplaceExisting);
            IRandomAccessStream randomStream = await file.OpenAsync(FileAccessMode.ReadWrite);
            IOutputStream outStream = randomStream.GetOutputStreamAt(0);
            Stream stream = outStream.AsStreamForWrite();
            XmlRootAttribute oRootAttr = new XmlRootAttribute();
            oRootAttr.ElementName = "Travel";
            oRootAttr.IsNullable = true;
            XmlSerializer oSerializer = new XmlSerializer(typeof(ObservableCollection<Travel>), oRootAttr);
            oSerializer.Serialize(stream, list);

            await outStream.FlushAsync();
            
            stream.Dispose();
            randomStream.Dispose();
            outStream.Dispose();
}
0

Po kilku godzinach męki rozwiązałem problem. Tym problemem była funkcja public static async void SerializeToXML(ObservableCollection<Travel> list) Okazało się że musi ona zostać wywoływana asynchronicznie z wyrażeniem await, a co za tym idzie jej deklaracja powinna mieć taką postać: public static async Task SerializeToXML(ObservableCollection<Travel> list) Po tej modyfikacji wszystko gra i śmiga.

1 użytkowników online, w tym zalogowanych: 0, gości: 1