【发布时间】:2017-01-24 04:32:27
【问题描述】:
我的 Xamarin.Forms 项目中有一个特定的屏幕。在 XAML 文件中,我创建了一个 Slider 元素,并在后面的代码中访问滑块以更新其值,但 iOS 上的 UI 永远不会改变。在 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;
}
我已确认此方法按预期每秒调用一次,并且进度变量中的值是正确的。当progress 更新为 1 时,从ProgressSlider.Value(由Console.WriteLine() 确定)返回的值会更新为 1,但之后不会更改,即使 progress 继续按预期增长。
同样,此问题仅在 iOS 上,在 Android 上一切正常。
谁能帮帮我?
【问题讨论】:
-
如果 UpdateCTI 正在由线程计时器执行,则该函数正在辅助线程中执行,请使用 Device.BeginInvokeOnMainThread
-
@Gusman 谢谢,解决了!将此作为答案发布,我会接受。奇怪的是它仍然可以在 Android 上运行...
标签: c# ios xamarin xamarin.ios xamarin.forms