一段时间以来,我一直在为向Listview中的按钮添加计时器的问题而苦苦挣扎。我在ListView中有大约100个按钮。我希望每个人在点击后测量15分钟。到目前为止,我已经写了这样的东西,但没有工作:
private readonly DispatcherTimer timer = new DispatcherTimer();
private DateTime Timers_end;
private void Button_ListView_Click(object sender, EventArgs e)
{
var BTN = sender as Button;
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += delegate
{
var now = DateTime.Now;
Timers_end = now.AddMinutes(15);
BTN.Content = (Timers_end - now).ToString(@"hh:mm:ss");
};
timer.Start();
}
我希望每个按钮都能独立工作。
它可以这样工作:
private void Button_ListView_Click(object sender, RoutedEventArgs e)
{
var btn = (Button)sender;
var endTime = DateTime.Now.AddMinutes(15);
var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
timer.Tick += delegate
{
var remaining = endTime - DateTime.Now;
if (remaining < TimeSpan.Zero)
{
timer.Stop();
}
else
{
btn.Content = remaining.ToString(@"hh:mm:ss");
}
};
timer.Start();
}
每个按钮都需要一个DispatcherTimer实例。您可以将这些实例存储在字典中。我认为下面的代码可以使工作
class TimerInfo
{
public DispatcherTimer timer { get; set; }
public DateTime Timers_end { get; set; }
}
Dictionary<Button, TimerInfo> timers = new Dictionary<Button, TimerInfo>();
private void Button_ListView_Click(object sender, EventArgs e)
{
var BTN = (Button)sender;
if (!timers.TryGetValue(BTN, out TimerInfo timer))
{
timer = new TimerInfo { timer = new DispatcherTimer() };
timers[BTN] = timer;
}
timer.timer.Interval = TimeSpan.FromSeconds(1);
timer.timer.Tick += delegate
{
var now = DateTime.Now;
timer.Timers_end = now.AddMinutes(15);
BTN.Content = (timer.Timers_end - now).ToString(@"hh:mm:ss");
};
timer.timer.Start();
}