C# Xamarin Android with 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;

每次更新活动中已绑定的ViewModel属性时都会出现此错误。我知道这个错误与从另一个线程(不是UI线程)更新UI有关,但我无法控制MVVMLight如何进行绑定

活动:

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)
是关于您的问题。