Xamarin ProgressBar动画不显示问题求助
解决Xamarin ProgressBar无动画直接显示完成的问题
嘿,我一眼就揪出问题所在了——你的ProgressBar直接跳转到完成状态没动画,核心是阻塞了UI线程,还有个小笔误得修正!
问题1:用.Wait()卡死了UI线程
你在OnAppearing里写了UpdateProgressBar(0.8, 2000).Wait();,这可是UI操作的大忌!.Wait()会让当前UI线程暂停,硬生生等异步任务结束。但ProgressTo本来就需要UI线程逐帧更新进度,线程被卡住后,动画根本没机会一步步跑,直接就跳到最终的0.8进度值了。
问题2:控件实例变量名不匹配
你创建的ProgressBar实例是progressBar,但在UpdateProgressBar里调用的是MemeProgressBar.ProgressTo——这明显是变量名写错了!不修正的话,要么编译报错,要么你的代码根本没作用在你创建的那个ProgressBar上。
修正后的完整代码
把OnAppearing改成异步方法,用await替代.Wait(),同时修正变量名:
ProgressBar progressBar; public Preivew() { InitializeComponent(); ContentView LoadingView = new ContentView { VerticalOptions = LayoutOptions.FillAndExpand, HorizontalOptions = LayoutOptions.FillAndExpand, BackgroundColor = Color.Transparent }; progressBar= new ProgressBar { ProgressColor = Color.FromHex("#3897F0"), HorizontalOptions = LayoutOptions.FillAndExpand, HeightRequest = 30, Progress = 0.0 }; RelativeLoadingLayout.Children.Add(LoadingView, Constraint.RelativeToParent((parent) => { return (0); }), Constraint.RelativeToParent((parent) => { return (0); }), Constraint.RelativeToParent((parent) => { return parent.Width; }), Constraint.RelativeToParent((parent) => { return parent.Height; })); LoadingView.Content = progressBar; } // 改成async方法,避免阻塞UI protected override async void OnAppearing() { base.OnAppearing(); await UpdateProgressBar(0.8, 2000); } async Task UpdateProgressBar(double Progress, uint time) { // 修正变量名,确保操作的是你创建的ProgressBar await progressBar.ProgressTo(Progress, time, Easing.Linear); }
额外提醒
在Xamarin的UI生命周期方法(比如OnAppearing)里处理异步操作时,一定要用async/await组合,绝对别用.Wait()或者.Result,这些操作会阻塞UI线程,不仅动画失效,还可能引发死锁哦。
内容的提问来源于stack exchange,提问作者user12520502
相关产品推荐
相关产品推荐

