Mam następujący kod,Jak asynchronizować Files.ReadAllLines i czekać na wyniki?
private void button1_Click(object sender, RoutedEventArgs e)
{
button1.IsEnabled = false;
var s = File.ReadAllLines("Words.txt").ToList(); // my WPF app hangs here
// do something with s
button1.IsEnabled = true;
}
Words.txt
ma mnóstwo słów, które czytałem w zmiennej s, staram się wykorzystać async
i await
słów kluczowych w języku C# 5 Korzystanie Async CTP Library
więc aplikacja WPF nie robi powiesić. Do tej pory mam następujący kod,
private async void button1_Click(object sender, RoutedEventArgs e)
{
button1.IsEnabled = false;
Task<string[]> ws = Task.Factory.FromAsync<string[]>(
// What do i have here? there are so many overloads
); // is this the right way to do?
var s = await File.ReadAllLines("Words.txt").ToList(); // what more do i do here apart from having the await keyword?
// do something with s
button1.IsEnabled = true;
}
Celem jest, aby odczytać plik w asynchroniczny zamiast zsynchronizowane, aby uniknąć zamarzania WPF aplikacji.
Każda pomoc jest doceniana, dzięki!
Co powiecie na początek, usuwając niepotrzebne wywołanie ToList(), które utworzy kopię tablicy łańcuchów? –
@JbEvain - Aby być pedantycznym, 'ToList()' nie tylko kopiuje tablicę, tworzy 'List'. Bez dalszych informacji nie można założyć, że jest to niepotrzebne, ponieważ być może "' // coś z użyciem s' "wywołuje metody' List'. – Mike