Szybkie pytanie, ReadAllText -> Speech

0

Witam

Od razu zaznaczę że dopiero zaczynam przygodę z c#. Mam do stworzenia program który po kliknięciu przycisku będzie wypowiadał tekst z pliku. Próbowałem to zrobić na milion sposobów cały czas jest coś nie tak. W tym kodzie jak klikam przycisk to mi się okno zamyka i nic więcej się nie dzieje. Jak zamienię w tej linijce zmienna text na normalnego Stringa np. "Hello" to wszystko ładnie mi czyta "Windows.Media.SpeechSynthesis.SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync(text); ". Natomiast z pliku jakbym nie próbował to nie działa :(

Proszę o pomoc

Kod https://4programmers.net/Pastebin/7550

0

To może zrób debug krok po kroku i zobacz co zawiera zmienna text. Bo może jest puste

0

Uruchom pod debuggerem i zobacz jaki dostajesz błąd. Ja dostałem InvalidOperationException, że w wątku UI nie wolno wykonywać operacji synchronicznych (np. ReadAllText()). Zalecane jest użycie Task.Run(). Ale po objęciu tego wszystkiego w Task.Run() i tak wystąpuje wyjątek - tym razem UnauthorizedAccessException z komunikatem "Access to the path '[ścieżka]' is denied."

I w sumie nie musiałem testować, od razu mogłem to powiedzieć - to jest UWP. Aplikacjom UWP nie wolno pisać i czytać sobie po całym dysku.

Użyj FileOpenPicker, aby użytkownik ci wybrał i plik i wtedy możesz z nim sobie już zrobić, co chcesz:

FileOpenPicker fop = new FileOpenPicker();
fop.FileTypeFilter.Add(".txt");
var file = await fop.PickSingleFileAsync();

var text = await FileIO.ReadTextAsync(file);

if (text != null)
{
    MediaElement mediaElement = new MediaElement();
    var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
    Windows.Media.SpeechSynthesis.SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync(text);
    mediaElement.SetSource(stream, stream.ContentType);
    mediaElement.Play();
}

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