C# 在WPF/C中随机显示图像#
我有一个文件夹,里面装满了图像文件,我把它们的名字加载到了一个字符串数组中。我有一个按钮来显示它们。这项工作:(XAML片段): 当我点击下一步按钮时,它会显示一个新的图像。如果我再次单击它,它会显示另一个图像。但我真正想要的是显示一系列随机图像,每个图像之间有10秒的等待时间。但如果我将下一个按钮处理程序更改为:C# 在WPF/C中随机显示图像#,c#,wpf,C#,Wpf,我有一个文件夹,里面装满了图像文件,我把它们的名字加载到了一个字符串数组中。我有一个按钮来显示它们。这项工作:(XAML片段): 当我点击下一步按钮时,它会显示一个新的图像。如果我再次单击它,它会显示另一个图像。但我真正想要的是显示一系列随机图像,每个图像之间有10秒的等待时间。但如果我将下一个按钮处理程序更改为: private void buttonNext_Click(object sender, RoutedEventArgs e) { DisplayNextRandomImag
private void buttonNext_Click(object sender, RoutedEventArgs e)
{
DisplayNextRandomImage();
System.Threading.Thread.Sleep(10000);
DisplayNextRandomImage();
System.Threading.Thread.Sleep(10000);
DisplayNextRandomImage();
}
它没有显示任何内容
我是否需要在睡眠之间调用或运行某个线程来唤醒并显示图像?我做错了什么?排一个
队列。并添加所有图像列表,加载第一个图像,然后在10秒后,您可以将下一个故事板出列并加载图像,完成后,将下一个故事板出列并开始加载,依此类推。制作一个队列。然后添加所有图像列表,加载第一个图像,然后在10秒后,您可以将下一个故事板排出来并加载图像,当完成后,将下一个图像排出来并开始加载,依此类推。传统的做法是使用,回调发生在主线程上,因此您在操作GUI元素时不会遇到任何问题
最近的一个选项是使用,在这种情况下,只需将单击处理程序更改为:
private async void buttonNext_Click(object sender, RoutedEventArgs e)
{
while (true)
{
DisplayNextRandomImage();
await Task.Delay(10000);
}
}
这两种方法都不能处理用户单击按钮两次的情况,但这应该足以让您开始操作。传统的方法是使用回调,回调发生在主线程上,这样您就不会在操作GUI元素时遇到任何问题
private void Button_Click(object sender, RoutedEventArgs e)
{
DisplayNextRandomImage();
Dispatcher disp = ImageViewer.Dispatcher;
DispatcherTimer t = new DispatcherTimer(TimeSpan.FromSeconds(10), DispatcherPriority.Normal, timer_Tick , disp);
t.Start();
}
void timer_Tick(object sender, EventArgs e)
{
DisplayNextRandomImage();
}
最近的一个选项是使用,在这种情况下,只需将单击处理程序更改为:
private async void buttonNext_Click(object sender, RoutedEventArgs e)
{
while (true)
{
DisplayNextRandomImage();
await Task.Delay(10000);
}
}
这两种方法都不能处理用户单击按钮两次的情况,但这应该足以让您开始
private void Button_Click(object sender, RoutedEventArgs e)
{
DisplayNextRandomImage();
Dispatcher disp = ImageViewer.Dispatcher;
DispatcherTimer t = new DispatcherTimer(TimeSpan.FromSeconds(10), DispatcherPriority.Normal, timer_Tick , disp);
t.Start();
}
void timer_Tick(object sender, EventArgs e)
{
DisplayNextRandomImage();
}
您也可以使用以下简写符号:
DispatcherTimer t = new DispatcherTimer(TimeSpan.FromSeconds(10), DispatcherPriority.Normal, (s1,e1)=>{DisplayNextRandomImage();} , disp);
您也可以使用以下简写符号:
DispatcherTimer t = new DispatcherTimer(TimeSpan.FromSeconds(10), DispatcherPriority.Normal, (s1,e1)=>{DisplayNextRandomImage();} , disp);
使用故事板动画如果你有线程。睡眠(…)
在你的代码中,你可能做错了什么。在这种情况下,您正在休眠UI线程,因此难怪它不会更新!您还应该避免调用Random Random=new Random()方法中的代码>。最好在应用程序中使用单个随机对象,以避免重复值。如果有线程,请使用情节提要动画。睡眠(…)
在代码中,您可能做错了什么。在这种情况下,您正在休眠UI线程,因此难怪它不会更新!您还应该避免调用Random Random=new Random()方法中的代码>。最好在应用程序中使用单个随机对象,以避免重复值。