我想在ViewModel的構造函數中加載一些數據,但由於WinRT的異步性質,我不得不使用異步方法。不幸的是,我不能有一個異步構造函數,所以我嘗試使用異步方法作爲同步方法。我確信在加載應用程序時有更好的方法來加載數據(異步),但我現在的想法是空白。構造函數WinRT異步數據加載
我正在尋找一種方法來修復我的應用程序,使用我要下去的思路,或者使用更合適的方法來解決這個問題。
該代碼非常簡單(甚至缺少ViewModel)只是爲了演示我面臨的問題。
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";
}
}
親切的問候
記住錯誤處理。如果''async'初始化方法返回的'Task'永遠不會被觀察到,任何異常都會被悄悄吞下。所以一定要在'InitializeAsync'中有一個'try' /'catch'或者另一個方法'await'結果。 –
當然。無論調用是在初始化程序還是其他任何可能導致錯誤狀態的方法中,這都適用。 –