C# Xamarin Android with MVVMLight:只有创建视图层次结构的原始线程才能接触其视图
每次更新活动中已绑定的ViewModel属性时都会出现此错误。我知道这个错误与从另一个线程(不是UI线程)更新UI有关,但我无法控制MVVMLight如何进行绑定 活动:C# Xamarin Android with MVVMLight:只有创建视图层次结构的原始线程才能接触其视图,c#,android,xamarin,xamarin.android,mvvm-light,C#,Android,Xamarin,Xamarin.android,Mvvm Light,每次更新活动中已绑定的ViewModel属性时都会出现此错误。我知道这个错误与从另一个线程(不是UI线程)更新UI有关,但我无法控制MVVMLight如何进行绑定 活动: private readonly List<Binding> _bindings = new List<Binding>(); public PersonViewModel ViewModel { get { return App.Locator.Detail;
private readonly List<Binding> _bindings = new List<Binding>();
public PersonViewModel ViewModel
{
get
{
return App.Locator.Detail;
}
}
private TextView _txtName;
public TextView TxtName
{
get
{
return _txtName ??
(_txtName = FindViewById<TextView>(Resource.Id.txtName));
}
}
protected async override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Detail);
_bindings.Add(this.SetBinding(
() => ViewModel.Person.Name,
() => TxtName.Text));
await Task.Factory.StartNew(() => { ViewModel.LoadDetailCommand.Execute(null); });
}
我对MVVMLight一无所知,但我会尝试改变这一行:
await Task.Factory.StartNew(() => { ViewModel.LoadDetailCommand.Execute(null); });
对于这一个:
ViewModel.LoadDetailCommand.Execute(null);
您不需要启动新任务来执行命令
还有这个:
protected async override void OnCreate(Bundle savedInstanceState)
protected override void OnCreate(Bundle savedInstanceState)
对于这一个:
protected async override void OnCreate(Bundle savedInstanceState)
protected override void OnCreate(Bundle savedInstanceState)
我对MVVMLight一无所知,但我会尝试改变这一行:
await Task.Factory.StartNew(() => { ViewModel.LoadDetailCommand.Execute(null); });
对于这一个:
ViewModel.LoadDetailCommand.Execute(null);
您不需要启动新任务来执行命令
还有这个:
protected async override void OnCreate(Bundle savedInstanceState)
protected override void OnCreate(Bundle savedInstanceState)
对于这一个:
protected async override void OnCreate(Bundle savedInstanceState)
protected override void OnCreate(Bundle savedInstanceState)
好的,我在ViewModel中创建了任务并等待它,以便捕获所有可能的异常:
Person = await Task.Run(async () =>
{
var p = await _dataService.GetPerson(0);
return p;
});
感谢@xleon的帮助。好的,我管理了它,在ViewModel中创建了必要的任务并等待它,这样我就可以捕获所有可能的异常:
Person = await Task.Run(async () =>
{
var p = await _dataService.GetPerson(0);
return p;
});
感谢@xleon的帮助。我知道我不应该这样做,但是LoadDetailCommand(_dataService.GetPerson)使用httpclient执行一个网络调用,并给我一个“NetworkOnMainThreadException”异常。。。如果我将其封装在一个任务中。运行如何捕获错误?即使使用
try/catch
,方法中的任何任务都不会产生异常:方法不是无效的:“private async Task LoadDataAsync()”此行protected async override void OnCreate(Bundle savedInstanceState)
是关于你的问题。我知道我不应该这样做,但是LoadDetailCommand(\u dataService.GetPerson)使用httpclient执行网络调用,并给我一个“NetworkOnMainThreadException”异常。。。如果我将其封装在一个任务中。运行如何捕获错误?即使使用try/catch
,方法中的任何任务都不会产生异常:try/catch
:方法不是无效的:“private async Task LoadDataAsync()”这一行protected async override void OnCreate(Bundle savedInstanceState)
是关于您的问题。