我正在嘗試學習WPF應用程序中的MVVM模式。我在視圖模型寫了這個異步方法(它必須是異步,因爲我使用的HttpClient和它的方法是異步):如何調用viewmodel中的異步方法
public async Task<Dictionary<int, BusStop>> GetBusStops()
{
var busStopDict = new Dictionary<int, BusStop>();
var url = "my url";
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(url))
using (HttpContent content = response.Content)
{
string data = await content.ReadAsStringAsync();
var regularExpression = Regex.Match(data, "\\[(.)*\\]");
var result = regularExpression.Groups[0];
var json = JValue.Parse(result.ToString());
var jsonArray = json.ToArray();
foreach (var a in jsonArray)
{
// irrelevant logic
busStopDict.Add(nr, bs);
}
}
return busStopDict;
}
該方法返回充滿總線字典停止(我的模型)。我想在視圖中將此字典與組合框綁定在一起,但我無法得到它的工作,因爲我無法在viewmodel的構造函數中調用此異步方法,並且我不知道我可以在哪裏調用它。你有什麼建議嗎?
爲什麼你不能在構造函數中調用該方法? – Fruchtzwerg
構造函數不能是異步的,所以我不能等待該方法。如果我不等待該方法,則返回Task <>而不是Dictionary <> – r9s
基本上,您需要了解的所有內容在本文中都有詳細描述:https://msdn.microsoft.com/en-us/雜誌/ dn630647.aspx。我建議閱讀它,而不是按照下面的答案。 – Evk