每當我更新已在活動中綁定的ViewModel屬性時,我收到此錯誤。我知道這個錯誤是從另一個線程(不是UI線程)更新的用戶界面相關的,但我無法控制如何MVVMLight做結合...具有MVVMLight的Xamarin Android:只有創建視圖層次結構的原始線程才能觸及其視圖
活動:
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); });
}
視圖模型:
private IDataService _dataService;
private PersonObj _person;
public PersonObj Person
{
get
{
return _person;
}
set
{
Set(ref _person, value);
}
}
private RelayCommand _loadDetailCommand;
public RelayCommand LoadDetailCommand
{
get
{
return _loadDetailCommand
?? (_loadDetailCommand = new RelayCommand(
async() =>
{
await LoadDataAsync();
}));
}
}
public PersonViewModel(IDataService dataService)
{
_dataService = dataService;
}
private async Task LoadDataAsync()
{
try
{
Person= await _dataService.GetPerson(0);
}
catch (Exception ex)
{
// Exception here!!
}
}
我知道我不應該這樣做,但LoadDetailCommand(_dataService.GetPerson)使用httpclient執行網絡調用並給我一個「NetworkOnMainThreadException」異常......如果我將它封裝在Task.Run中,我怎麼能夠捕獲這些錯誤? –
即使使用'try/catch','async void'方法內的任何任務都不會產生異常:https://msdn.microsoft.com/en-us/magazine/jj991977.aspx?f=255&MSPPError=-2147217396 – xleon
該方法不是void:「private async Task LoadDataAsync()」 –