C# 使用计时器在WPF中的图像之间快速平滑地切换?
我想在WPF应用程序上每隔0.2秒显示一个随机图像 我曾尝试使用各种.NET计时器来实现这一点,但响应并不出色——虽然有效,但它往往会结巴,否则一张图像的显示时间会明显长于其他图像 这里最好的方法是什么/我错过了什么?我假设问题出在系统、定时器或随机变量上。是否有更好的计时器可供使用> 创建PlayerViewModels时,我将所有图像预加载为BitmapSource属性 我已经发布了下面的代码:C# 使用计时器在WPF中的图像之间快速平滑地切换?,c#,wpf,timer,C#,Wpf,Timer,我想在WPF应用程序上每隔0.2秒显示一个随机图像 我曾尝试使用各种.NET计时器来实现这一点,但响应并不出色——虽然有效,但它往往会结巴,否则一张图像的显示时间会明显长于其他图像 这里最好的方法是什么/我错过了什么?我假设问题出在系统、定时器或随机变量上。是否有更好的计时器可供使用> 创建PlayerViewModels时,我将所有图像预加载为BitmapSource属性 我已经发布了下面的代码: private const int TIMER_INTERVAL = 200;
private const int TIMER_INTERVAL = 200;
private Timer _timer;
private static Random _random = new Random();
public List<PlayerViewModel> Players { get; set; }
public PlayerViewModel CurrentPlayer { get; set; }
public MainViewModel()
{
Players = new PlayerInfoParser().Players.Select(x=> new PlayerViewModel(x)).ToList();
CurrentPlayer = GetRandomPlayer();
_timer = new Timer(UpdatePlayer, null, 0, TIMER_INTERVAL);
}
private void UpdatePlayer(object state)
{
CurrentPlayer = GetRandomPlayer();
OnPropertyChanged("CurrentPlayer"); // Update View
}
private PlayerViewModel GetRandomPlayer()
{
var randomNumber = _random.Next(Players.Count);
return (Players[randomNumber]);
}
GetRandomPlayer方法可能返回与上次调用它时相同的PlayerViewModel实例,这可能解释了为什么图像有时在屏幕上停留的时间比它们应该停留的时间长。至少,我会在其中添加代码,以确保每次调用都会得到不同的实例,即,有一个字段来存储当前随机数,并保持循环,直到其不同。另外,您如何在PlayServiceWModel中创建BitmapSource值?可能值得在你的问题中发布这些代码。你的第一个想法绝对正确,史蒂文。我只是缺少一点常识!当我处理一个小数据集时,应该很明显。