gpt4 book ai didi

c# - Xamarin.Forms - slider 不更新 iOS 中的属性分配,适用于 Android

转载 作者:太空宇宙 更新时间:2023-11-03 23:04:28 25 4
gpt4 key购买 nike

我的 Xamarin.Forms 项目中有一个特定的屏幕。在 XAML 文件中,我创建了一个 Slider 元素,在后面的代码中,我访问了 slider 以更新它的值,但 UI 在 iOS 上从未改变。在 Android 上完美运行。这是相关代码:

XAML

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="TnpApp.Forms.AudioPlayer" BackgroundColor="Gray">
<ContentPage.Content>
<StackLayout Orientation="Vertical" Padding="16" >
// ...
<Slider x:Name="ProgressSlider" Minimum="0" Maximum="100"/>
// ...
</StackLayout>
</ContentPage.Content>
</ContentPage>

代码隐藏(一种在指定时间间隔调用以更新 UI 的方法)

void UpdateCTI(object sender, ElapsedEventArgs e)
{
var progress = DependencyService.Get<IAudioPlayer>().GetAudioProgress();
ProgressSlider.Value = progress;
}

我已确认此方法按预期每秒调用一次,并且进度变量中的值是正确的。从 ProgressSlider.Value 返回的值(由 Console.WriteLine() 确定)在 progress 更新为 1 时更新为 1,但不更新在那之后发生变化,即使 progress 继续按预期增长。

同样,此问题仅在 iOS 上出现,在 Android 上一切正常。

有人能帮我吗?

最佳答案

如果您的代码是在线程计时器上执行的,那么代码是在辅助线程上执行的,它无法访问 UI。

要在主线程上运行代码,请使用 Device.BeginInvokeOnMainThread:

void UpdateCTI(object sender, ElapsedEventArgs e)
{
var progress = DependencyService.Get<IAudioPlayer>().GetAudioProgress();
Device.BeginInvokeOnMainThread (() => ProgressSlider.Value = progress);
}

关于c# - Xamarin.Forms - slider 不更新 iOS 中的属性分配,适用于 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41814825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com