DispatcherTimer类tick事件问题

本文关键字:问题 事件 tick DispatcherTimer | 更新日期: 2023-09-27 18:17:12

我不知道如何解释清楚,但我会尽我所能。我使用DispatcherTimer类在我的windows phone 8项目。我有一些复选框,当一个复选框被选中,按钮按下倒计时从公交时刻表开始。这里一切都工作得很好,但是当我取消选中复选框,当我选中另一个复选框时,相同的公交车时间开始了,现在它下降了2秒(倒计时)。如果我取消选中复选框并再次选中另一个,同样的时间开始倒计时,倒计时时间为3秒……我不明白是怎么回事,因为在click_event上总是有一个类的新实例。解决这个问题的唯一方法是重新加载我的wp8页面并再次检查,然后按下倒计时按钮开始。注意:我从一个。txt文件中读取我的时间,该文件存储在我的项目中的一个文件夹中(使用streamreader)。有什么建议吗?

下面是一些代码:
 CheckBox[] listchekbox;
 DispatcherTimer timer;
    private void Button_Click(object sender, RoutedEventArgs e)//BUTTON CLICK
    {
         timer = new DispatcherTimer();
        listchekbox = new CheckBox[4] { Check1, Check2, Check3, Check4 };
        if (Onlyoneclick(listchekbox, 0)) { Gettingbustime(path_names[0]); }
        else if (Onlyoneclick(listchekbox, 1)) { Gettingbustime(path_names[1]); }

        timer.Interval = new TimeSpan(0,0,1);
        timer.Tick += onclick;
        timer.Start();

    }
    private void onclick(object sender, EventArgs e) // TIMER EVENT COUNT
    {
        Countdown(bus1); // the parameter is the textbox where the result is displayed
        Countdown(bus2);
    }
    private bool Onlyoneclick(CheckBox[] itemselected,int id) // this is not so important
    {
        int itemcounter = 0;
        int falsecounter = 0;
        for (int i = 0; i < listchekbox.Length; i++)
        {
            if (itemselected[i].IsChecked == true && id == i)
            {
                itemcounter++;
            }
            else if (itemselected[i].IsChecked == true) { falsecounter++; }
        }
        if (itemcounter == 1 && falsecounter==0) { return true; }
        else { return false; }
    }
    public void Countdown(TextBlock tx) 
    {
        string minute = tx.Text.Substring(0, 2);
        string sekunde = tx.Text.Substring(3, 2);
        int minute1 = Convert.ToInt32(minute);
        int sekunde1 = Convert.ToInt32(sekunde);
        sekunde1 = sekunde1 - 1;
             if (sekunde1 < 0) 
             {
                 minute1 = minute1 - 1;
                 sekunde1 = 59;
             }
             if (minute1 < 0) 
             {
                 timer.Stop();
                 MessageBox.Show("Autobus left!");
             }
             if (sekunde1 < 10) { tx.Text = minute1.ToString() + ":0" + sekunde1.ToString(); }
             else { tx.Text = minute1.ToString() + ":" + sekunde1.ToString(); }
             if (minute1 < 10) { tx.Text = "0" + minute1.ToString() + ":" + sekunde1.ToString(); }
             if (minute1 < 10 && sekunde1 < 10) { tx.Text = "0" + minute1.ToString() + ":0" + sekunde1.ToString(); }
    }

DispatcherTimer类tick事件问题

尝试从Button_Click:

删除此代码
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0,0,1);
timer.Tick += onclick;