Dispatchertimer uruchamianie funkcji co dany okres czasu

0

Potrzebuję uruchamiać pewną funkcję co jakiś okres czasu.
Interval ustawiony na 1 sekundę.
W zdarzeniu Tick sprawdzam w pętli dla wszystkich obiektów z listy(jest ich mało) czy czas do konca % 30 == 0.
Jednak kiedy nadchodzi moment ,że warunek powinien się spełnić raz wypełniany jest wielokrotnie (zapętla się).
Jaki może być powód takiego zachowania, czy ma coś do tego ,że Dispatcher nie uruchamia się co równo sekundę?
Będę wdzięczny za wszelkie podpowiedzi.
Pozdrawiam.

0

Masz błąd w 37 linijce.

0

Ok, rozumiem. To może tak:
W funkcji logowania uruchamiam dispatchertimer

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

W zdarzeniu Tick:

for (int i = 0; i < checkedItems.Count; i++)
{
                if (checkedItems[i].AuctionIsBid)
                {
                   
                    if (checkedItems[i].AuctionSecondsToEnd % 30 == 0) 
                    {
                        webapi.ItemInfoStruct[] itemInfoStruct2;
                        indeksArray[0] = checkedItems[i].AuctionIndex;
                        itemInfoStruct2 = service.doGetItemsInfo(sessionHandle, indeksArray, 0, 0, 0, 0, 0, 0, out itemsNotFound, out itemsAdminKilled);
                        checkedItems[i].AuctionPrice = itemInfoStruct2[0].itemInfo.itPrice;
                        checkedItems[i].AuctionWinnerId = itemInfoStruct2[0].itemInfo.itHighBidder;
                        LogListbox.Items.Add("Zaktualizowano produkt o nazwie ");
                    }
                    else if()
                    {
                          //pozostałe warunki nie mające znaczenia
                    }
                    else { checkedItems[i].AuctionSecondsToEnd--;}
}

Czy teraz można już coś powiedzieć więcej?

0
klemensior napisał(a):

W funkcji logowania uruchamiam dispatchertimer

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

Ile razy ten kod się wykonuje? Bo każde += new EventHandler powoduje, że handler wykona się o jeden raz więcej.
np.

timer.Tick += new EventHandler(dispatcherTimer_Tick);
timer.Tick += new EventHandler(dispatcherTimer_Tick);
timer.Tick += new EventHandler(dispatcherTimer_Tick);

I zobaczysz że dispatcherTimer_Tick odpala się teraz trzykrotnie. Zauważ zresztą, że operatorem jest +=.

Zdarzenie do timera powinieneś przypisać tylko raz (np. na starcie aplikacji, albo w miejscu tworzenia timera) a potem już tego nie dotykać.

0
Azarien napisał(a):
klemensior napisał(a):

W funkcji logowania uruchamiam dispatchertimer

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

Ile razy ten kod się wykonuje? Bo każde += new EventHandler powoduje, że handler wykona się o jeden raz więcej.
np.

Ten kod wykonuje się tylko i wyłącznie raz w trakcie logowania do aplikacji po naciśnięciu przycisku. Przynajmniej takie jest założenie i później nic z timer nie robię.

1 użytkowników online, w tym zalogowanych: 0, gości: 1