我正在学习Windows 8编程,我已经在这个问题上奋斗了几个小时,然后才开始以某种方式工作。这个功能现在似乎在某种程度上起作用。但肯定看起来不太好。
功能会登录,如果登录成功,那么它应该关闭更新商家的任务。执行不应等待商家列表完成。
Tricky部分是那些也会触发OnPropertyChanged并且需要在UI线程中执行的LoadingMerchants属性。
public async Task<bool?> LoginAsync(string username, string password)
{
var uri = new Uri(string.Format("{0}/User/Login?userName={1}&password={2}", ServerURL, username, password));
bool? result = await GetJsonAsync<bool?>(uri);
if(result.HasValue && result.Value)
{
LoginDone = true;
LoadingMerchants = true;
var task = Task.Run(async () => { await LoadMerchantsAsync(); });
var uitask = task.ContinueWith((loadtask) => { LoadingMerchants = false; }, TaskScheduler.FromCurrentSynchronizationContext());
}
return result;
}
Task.Run是否正确地开始在新胎面上执行?
我是否有许多额外的等待而不需要?
答案 0 :(得分:0)
Task.Run
是在线程池线程上开始执行的正确方法。但你不需要它。
这应该可以正常工作:
public async Task LoadMerchantsAndUpdateUiAsync()
{
LoadingMerchants = true;
await LoadMerchantsAsync();
LoadingMerchants = false;
}
public async Task<bool?> LoginAsync(string username, string password)
{
var uri = new Uri(string.Format("{0}/User/Login?userName={1}&password={2}", ServerURL, username, password));
bool? result = await GetJsonAsync<bool?>(uri);
if (result.HasValue && result.Value)
{
LoginDone = true;
LoadMerchantsAndUpdateUiAsync();
}
return result;
}