Проблема с тиковым событием класса DispatcherTimer
Я не знаю, как объяснить это ясно, но я буду стараться изо всех сил. Я использую класс DispatcherTimer в моем проекте Windows Phone 8. У меня есть несколько флажков, и когда флажок установлен и нажата кнопка, начинается отсчет времени от расписания автобусов. Здесь все работает отлично, но когда я снимаю флажок и когда проверяю другой, запускается то же самое время шины, и теперь оно уменьшается (обратный отсчет) на 2 секунды. Если я снимаю флажок и проверяю еще раз, в то же время начинается обратный отсчет, и отсчет идет на 3 секунды... Я не понимаю как, потому что на click_event всегда есть новый экземпляр класса. Единственное, что решает проблему, это перезагрузить страницу wp8, проверить что-то еще раз и нажать кнопку для начала обратного отсчета. Примечание: я читаю время из файла.txt, который хранится в папке в моем проекте (с использованием потокового чтения). Какие-либо предложения?
Вот некоторый код:
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(); }
}
1 ответ
Попробуйте удалить этот код из Button_Click:
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0,0,1);
timer.Tick += onclick;
И добавьте его вместо этого в свой конструктор.