Witam serdecznie. Mam mały problem jeżeli chodzi o zapis tekstu do pliku w metodzie asynchronicznej. Tworzę aplikację metro Win10. Mam o to taką metodę:
public async void Zapisz(string savePath, string save)
{
string SavePath = savePath;
string Save = save;
StorageFolder local = ApplicationData.Current.LocalFolder;
byte[] fileBytes = Encoding.UTF8.GetBytes(Save.ToCharArray());
var file = await local.CreateFileAsync(SavePath,
CreationCollisionOption.ReplaceExisting);
using (var s = await file.OpenStreamForWriteAsync())
{
s.Write(fileBytes, 0, fileBytes.Length);
}
}
Posiadam w aplikacji kilka Page-ów. W jednym użytkownik wpisuje w Textbox Nazwę, Opis, oraz wybiera ikonę użytkownika.
Po kliknięciu przycisku Zapisz informację zostają wywołane w ten sposób:
var Nowy1 = new Plik();
Nowy1.Zapisz("Nazwa1.txt", Nazwa1);
Nowy1.Zapisz("Opis1.txt", Opis1);
Nowy1.Zapisz("Ikona1.txt", Ikona1);
Po czym przechodzi do Page'a Informacji w którym zostają wczytane oraz wyświetlone po przez użycie metody:
public async Task<string> Wczytaj(string loadPath)
{
string LoadPath = loadPath;
bool fileExists1;
StorageFolder local = ApplicationData.Current.LocalFolder;
try // Sprawdzanie czy pliki istnieją:
{
StorageFile _File1Check = local.GetFileAsync(LoadPath).AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
fileExists1 = _File1Check != null;
}
catch
{
fileExists1 = false;
}
if (fileExists1 == false) //Jeżeli nie istnieje tworzymy plik
{
byte[] fileBytes1 = System.Text.Encoding.UTF8.GetBytes("Empty".ToCharArray());
var file1 = await local.CreateFileAsync(LoadPath,
CreationCollisionOption.ReplaceExisting);
using (var s = await file1.OpenStreamForWriteAsync())
{
s.Write(fileBytes1, 0, fileBytes1.Length);
return null;
}
}
else //Jeżeli istnieje odczytujemy
{
var _File18 = await local.OpenStreamForReadAsync(LoadPath);
using (StreamReader streamReader1 = new StreamReader(_File18))
{
var Save = streamReader1.ReadToEnd();
return Save;
Oraz jej wywołanie:
var CW1 = new Plik();
Nazwa1 = await CW1.Wczytaj("Nazwa1.txt");
Opis1 = await CW1.Wczytaj("Opis1.txt");
(Ikona zostaje wczytana podczas ładowania obrazka (loaded))
Problem polega na tym że wszystko działa jeżeli użyję Punktów przerywania i jadę blok po bloku. Metoda zapisuję oraz odczytuję poprawnie.
Jeżeli puszczę apkę luźno to się sypię bo nie zdąży zapisać do pliku tekstu a metoda wczytująca dostaje do odczytania pusty plik.
Pytanie do was czy mam jakiś błąd w tych metodach lub czy można coś do nich dopisać żeby metoda wczytująca poczekała aż tekst zostanie zapisany w pliku?