C# 在内容页的OnAppearing()中使用ScrollView中的ScrollToAsync()方法时出现问题

C# 在内容页的OnAppearing()中使用ScrollView中的ScrollToAsync()方法时出现问题,c#,android,xamarin,xamarin.forms,async-await,C#,Android,Xamarin,Xamarin.forms,Async Await,我在代码隐藏文件中重写了OnAppearing()方法,以自动滚动到特定元素,该元素是XAML文件中ScrollView元素中的子元素。我使用ScrollView元素中的方法ScrollToAsync(),滚动到元素MyBox,它是一个BoxView元素 protected override async void OnAppearing() { await HorizontalScrollView.ScrollToAsync(MyBox, ScrollToPosition.Center,

我在代码隐藏文件中重写了OnAppearing()方法,以自动滚动到特定元素,该元素是XAML文件中ScrollView元素中的子元素。我使用ScrollView元素中的方法
ScrollToAsync()
,滚动到元素MyBox,它是一个BoxView元素

protected override async void OnAppearing()
{
    await HorizontalScrollView.ScrollToAsync(MyBox, ScrollToPosition.Center, false);
    base.OnAppearing();
}
我的问题是,当页面出现时,它不会自动滚动到MyBox元素。但是,如果我插入了一个
Task.Delay()
,它就可以工作了


我的问题是,当我插入延迟时,它为什么会起作用?有什么方法可以不用使用
Task.delay()
语句吗?

您需要调用UIThread(主线程)中的行,如下所示

protected override async void OnAppearing()
{
    base.OnAppearing();

    Device.BeginInvokeOnMainThread(async ()=> {
        await HorizontalScrollView.ScrollToAsync(MyBox, ScrollToPosition.Center, false);
    });
}

尝试调用
base.OnAppearing()之后的行protected override async void OnAppearing()
{
    base.OnAppearing();

    Device.BeginInvokeOnMainThread(async ()=> {
        await HorizontalScrollView.ScrollToAsync(MyBox, ScrollToPosition.Center, false);
    });
}