每秒加载新图像我需要每秒(或两秒)加载新图像。以下代码不起作用:System.Threading.Thread.Sleep(2000);this.Image_LoadImage.Source=newBitmapImage(newUri(@"D:\connect2-1.gif"));System.Threading.Thread.Sleep(2000);this.Image_LoadImage.Source=newBitmapImage(newUri(@"D:\connect3-1.gif"));我看到的是应用程序休眠4秒,然后出现第二张图片。我应该怎么办?谢谢。使用定时器私有System.Threading.Timer定时器;publicMainWindow(){InitializeComponent();timer=newSystem.Threading.Timer(OnTimerEllipped,newobject(),0,2000);}privatevoidOnTimerEllipped(objectstate){if(!this.Dispatcher.CheckAccess()){this.Dispatcher.Invoke(newAction(LoadImages));}}私有布尔切换器;privatevoidLoadImages(){字符串stringUri=切换器?@"D:\connect2-1.gif":@"D:\connect3-1.gif";this.Image_LoadImage.Source=newBitmapImage(newUri(stringUri));切换器=!切换器;}使用定时器。调用线程休眠会阻塞UI线程。找到了这个链接:我猜你的代码驻留在一个在主线程上执行的函数中。因此,在函数返回之前,UI不会更新。届时,当您的函数返回时,您将保留最新状态(这就是为什么您只能看到您设置的最后一张图像的原因)。另外,请注意,通过在函数内发出Sleep()请求,您实际上是在阻塞应用程序的主线程(或您的函数正在运行的任何线程,但很可能这是您的主线程)。在休眠期间,您的应用程序不会简单地响应任何内容,您的UI将冻结。您可能决定使控件无效(Control.Refresh()、Control.Invalidate()、Control.Update()、Control.Refresh()、Application.DoEvents()),但除非使用正确,否则这些通常都是hack。使用定时器是一种选择。虽然,在您的具体情况下,简单地使用动画GIF可能是最好的解决方案。请注意,如果您决定使用计时器,那么System.Windows.Forms.Timer与其他计时器之间存在非常重要的区别。System.Windows.Forms.Timer将像System.Windows.Forms.Timer一样在您的主线程上运行(因此,与UI控件交互是安全的,因为您将从同一个线程进行交互;但在另一个线程上hand,它可能会稍微延迟开火)。相反,如果您要使用其他计时器,则不能在不违反重要规则的情况下直接访问UI控件。有关它的更多信息:比较.NETFramework类库中的Timer类请参阅:强制从UI线程进行GUI更新和:使用C#为表单中的Gif制作动画更改源代码后尝试刷新()控件。以上就是C#学习教程:每秒加载新图片分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
