C# 从ViewModel内新启动的线程更新可绑定属性
我正在学习Windows8编程,我已经和这个问题斗争了几个小时,直到它至少以某种方式起作用。这个功能现在似乎在某种程度上起作用了。但它看起来确实不好看 该函数进行登录,若登录成功,则应派生更新商户的任务。执行不应等待商户列表完成 棘手的部分是加载商家属性,这些属性也会触发PropertyChanged,并且需要在UI线程中执行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
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();
}
返回结果;
}