Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从ViewModel内新启动的线程更新可绑定属性_C#_Binding_Asynchronous_Windows 8 - Fatal编程技术网

C# 从ViewModel内新启动的线程更新可绑定属性

C# 从ViewModel内新启动的线程更新可绑定属性,c#,binding,asynchronous,windows-8,C#,Binding,Asynchronous,Windows 8,我正在学习Windows8编程,我已经和这个问题斗争了几个小时,直到它至少以某种方式起作用。这个功能现在似乎在某种程度上起作用了。但它看起来确实不好看 该函数进行登录,若登录成功,则应派生更新商户的任务。执行不应等待商户列表完成 棘手的部分是加载商家属性,这些属性也会触发PropertyChanged,并且需要在UI线程中执行 public async Task<bool?> LoginAsync(string username, string password) { var

我正在学习Windows8编程,我已经和这个问题斗争了几个小时,直到它至少以某种方式起作用。这个功能现在似乎在某种程度上起作用了。但它看起来确实不好看

该函数进行登录,若登录成功,则应派生更新商户的任务。执行不应等待商户列表完成

棘手的部分是加载商家属性,这些属性也会触发PropertyChanged,并且需要在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; 

}
public异步任务LoginAsync(字符串用户名、字符串密码)
{
var uri=new uri(string.Format(“{0}/User/Login?userName={1}&password={2}”,ServerURL,userName,password));
bool?result=wait GetJsonAsync(uri);
if(result.HasValue&&result.Value)
{
LoginDone=true;
LoadingMerchants=true;
var task=task.Run(异步()=>{await LoadMerchantsAsync();});
var uitask=task.ContinueWith((loadtask)=>{LoadingMerchants=false;},TaskScheduler.FromCurrentSynchronizationContext());
}
返回结果;
}
任务是否以正确的方式运行以在新的踏板上开始执行


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

任务。运行
是在线程池线程上开始执行的正确方法。但你不需要它

这应该很好:

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; 
}
公共异步任务LoadMerchantsAndUpdateUiAsync()
{
LoadingMerchants=true;
等待LoadMerchantsAsync();
LoadingMerchants=false;
}
公共异步任务LoginAsync(字符串用户名、字符串密码)
{
var uri=new uri(string.Format(“{0}/User/Login?userName={1}&password={2}”,ServerURL,userName,password));
bool?result=wait GetJsonAsync(uri);
if(result.HasValue&&result.Value)
{
LoginDone=true;
LoadMerchantsAndUpdateUiAsync();
}
返回结果;
}