[c#]DispatcherTimer wykonywanie metody co określony czasu


(klemensior15) #1

W zdarzeniu click przycisku logowania (później już nienaciskany) 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--;}

}

Funkcja ma się wykonywać domyślnie co 5 minut albo trochę więcej jeszcze nie zdecydowałem, ale dla testów ustawiłem 30 sekund. Jednak kiedy metoda wchodzi w if (checkedItems.AuctionSecondsToEnd % 30 == 0) wtedy zamiast wykonać się raz wpada w pętle i wykonuje się bez przerwy, nie wchodzi do elsa w którym odejmuje sekundy.

Będę wdzięczny za wszelkie propozycje co może być nie tak.


(Kubakuderski) #2
timer.Interval = new TimeSpan(0, 0, 1);

public TimeSpan(

	int hours,

	int minutes,

	int seconds

)

No ja tutaj widzę, że co 1 sekundę…


(klemensior15) #3

Nie zrozumiałeś, timer ma wykonywać się co sekundę bo inne warunki tego potrzebują a tym warunkiem wybieram tylko to co ma się wykonać co 30 sekund.

Jednak i tak problem już rozwiązałem.