Ich möchte einige Daten im Konstruktor eines ViewModel laden, aber aufgrund der Async-Natur von WinRT bin ich gezwungen, Async-Methoden zu verwenden. Leider kann ich keinen asynchronen Konstruktor haben, deshalb versuche ich die asynchrone Methode als synchrone Methode zu verwenden. Ich bin mir sicher, dass es eine viel bessere Möglichkeit gibt, Daten (async) auf die Anwendungslast zu laden, aber meine Gedanken sind im Moment leer.Asynchrone WinRT-Daten laden in Konstruktor
Ich bin entweder auf der Suche nach einer Möglichkeit, meine App mit der Linie der Gedanken, die ich gehe, zu beheben, oder um das dauerhaft mit einer angemesseneren Methode zu beheben.
Der Code ist sehr einfach (sogar das ViewModel fehlt), nur um das Problem zu demonstrieren, vor dem ich stehe.
public sealed partial class MainPage : Page
{
public string Data { get; set; }
public DataService _dataService { get; set; }
public MainPage()
{
this.InitializeComponent();
_dataService = new DataService();
var t = _dataService.GetData();
Data = t.Result;
}
/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name="e">Event data that describes how this page was reached. The Parameter
/// property is typically used to configure the page.</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
}
public class DataService
{
public async Task<string> GetData()
{
//Force async
await Task.Delay(1);
return "Hello";
}
}
Mit freundlichen Grüßen
Behalten Sie die Fehlerbehandlung im Auge. Wenn die von der asynchronen Initialisierungsmethode zurückgegebene "Task" niemals beachtet wird, werden alle Ausnahmen stillschweigend verschluckt. Stellen Sie also sicher, dass Sie in Ihrem 'InitializeAsync' einen' try'/'catch' haben oder eine andere Methode' erwarten'. –
Natürlich. Dies gilt unabhängig davon, ob sich der Aufruf in einem Initialisierer oder einer anderen Methode befindet, die zu einem fehlerhaften Status führen kann. –