列表视图中的多个计时器按钮WPF



一段时间以来,我一直在为向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();
}

最新更新