0

我正在研究 Windows 8 编程,我已经与这个问题斗争了几个小时,然后至少以某种方式让它工作。这个功能现在似乎以某种方式工作。但肯定不好看。

功能确实登录,如果登录成功,那么它应该分拆更新商家的任务。执行不应等待商家列表完成。

棘手的部分是那些 LoadingMerchants 属性,它们也会触发 OnPropertyChanged 并且需要在 UI 线程中执行。

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 是在新胎面上开始执行的正确方法吗?

我有很多不需要的额外等待吗?

4

1 回答 1

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; 
}
于 2012-08-29T15:06:02.713 回答