在应用程序中,我显示横幅,横幅会随着时间的推移或用户单击下一个/上一个而旋转。
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)标语控制器提供了Next
和Previous
方法,当被称为分别显示下一个/上一个标语时。至于DisplayBanner
方法试图显示横幅广告和当该文件中没有找到它会尝试使用它重新下载WebClient
的AsyncFileDownload
并在DownloadComplete
其显示图像。我是否正确地假设,Elapsed
由计时器触发和Next
/的手动调用Previous
会同时在它们自己的线程(Previous
/Next
在UI线程和Elapsed
Timer线程)上运行,并且可能同时引起不稳定,所以这两者同时发生吗?
您应该研究使用DispatcherTimer
类而不是常规类Timer
。它设计用于WPF UI,仅用于这些类型的用途,因为它在Dispatcher
线程上运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句