gpt4 book ai didi

c# - 从计时器线程更新 WPF UI

转载 作者:行者123 更新时间:2023-12-03 12:45:42 25 4
gpt4 key购买 nike

在应用程序中,我会显示随时间推移或用户点击下一个/上一个时旋转的横幅。

1) 我需要更新 Timer.Elapsed 方法中的 UI 元素。根据我的发现,似乎计时器滴答是在它们自己的线程上执行的,应该使用元素的调度程序来更新 UI。

( (Image)BannerPanel.Content ).Dispatcher.Invoke( new Action( () => {
( (Image)BannerPanel.Content ).Source = GetImage( new Uri( banner.Uri, UriKind.Absolute ) );
} ) );

但这会抛出一个 InvalidOperationException

2) 横幅 Controller 提供了NextPrevious 方法,调用时分别显示下一个/上一个横幅。由于 DisplayBanner 方法尝试显示横幅,当找不到文件时,它会尝试使用 WebClientAsyncFileDownload 重新下载它并在 DownloadComplete 它显示图像。我是否正确地假设 Elapsed 由计时器触发和手动调用 Next/Previous 可以同时发生,两者都是在它们自己的线程上运行(UI 线程上的 Previous/Next 和 Timer 线程上的 Elapsed),可能导致不稳定?

最佳答案

您应该考虑使用 DispatcherTimer 类而不是常规的 Timer。它旨在与 WPF UI 一起用于这些类型的用途,因为它在 Dispatcher 线程上运行。

更多信息:System.Windows.Threading.DispatcherTimer

关于c# - 从计时器线程更新 WPF UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669010/

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