Uruchamianie Timera razem z funkcją

0

Mam na form1 dany Timer1. Jak mogę uruchomić Timer z funkcją po naciśnięciu buttona? W buttonie zbierane są dane i przekazywane do funkcji. Kodu nie chce przenosić do Timera bo nie może pobierać znowu danych.

 
        private void button1_Click(object sender, EventArgs e)
        {
              [...]
              zapDoSearch(swit, sort, OrderType, cenaMin, cenaMax, pWysz);   //nie wiem jak uruchomić w timer
        }


         void zapDoSearch(int swit, int sort, int OrderType, float cenaMin, float cenaMax, parametryWysz pWysz)
        {
            [...]
        }
0

Timer jako pole klasy.

0
private void button1_Click(object sender, EventArgs e)
 {
 Timer1.Interval = 500; //500ms = 0,5 sekundy
 Timer1.Elapsed += new ElapsedEventHandler(cos_co_uruchomi_sie_po_uplynieciu_czasu); //Przypisanie metody
 Timer1.Start();
 zapDoSearch(swit, sort, OrderType, cenaMin, cenaMax, pWysz); //nie wiem jak uruchomić w timer 
 } 
0

Nie rozumiem.
Chcesz aby timer co te 500ms uruchamiał metodę zapDoSearch? Czy chcesz wystartować timer w metodzie zapDoSearch? Czy jeszcze coś innego?

0

Chcesz aby timer uruchamiał metodę zapDoSearch. Ale nie wiem jak to zrobić. Poniższy kod nie działa.

                timer1.Interval = 180000; 
                timer1.Elapsed += new ElapsedEventHandler(zapDoSearch(swit, sort, OrderType, cenaMin, cenaMax, pWysz)); //Przypisanie metody
                timer1.Start();    
 
0

Te parametry swit, sort, OrderType, cenaMin, cenaMax, pWysz w trakcie działania timera mogę się zmienić czy zawsze będą takie same?

0

zawsze takie same

0

Dlaczego nie chce działać mi tak napisany wątek?

 
Thread watekTree2 = new Thread(ogarnietaParametryWysz(swit, sort, OrderType, cenaMin, cenaMax, sessionHandle));

podaje mi błąd "Method name expected"
Jak pisze bez użycia wątku to działa normalnie.

0

Zrób to tak jak jest na stacku a nie kombinujesz.

0

nie umiem skapować o co w tym chodzi. Mam coś takiego

 
                System.Timers.Timer _timer = new System.Timers.Timer();
                _timer.Interval = (3000);
                _timer.Elapsed += (sender, e) => { ogarnietaParWysz(swit, sort, OrderType, cenaMin, cenaMax, sessionHandle); };
                _timer.Enabled = true;

w 3 lini (sender, e) wyskakuje błąd "A local variable named 'sender' cannot be declared in this scope because it would give a different meaning to 'sender', which is already used in a 'parent or current' scope to denote something else " oraz
"A local variable named 'e' cannot be declared in this scope because it would give a different meaning to 'e', which is already used in a 'parent or current' scope to denote something else"

0

Zmień nazwy w tej lambdzie, np sender2 i e2.

0

możesz trochę wytłumaczyć na jakiej zasadzie to działa i dlaczego wystarczyło zmienić te nazwy?

2

Ech... bo te błędy które wyrzuca kompilator, to do czytania są, i co ciekawe - można z nich się dowiedzieć o co chodzi kompilatorowi. Tutaj kompilator napisał (po przetłumaczeniu na polski), że:
"Zmienna lokalna o nazwie 'sender' nie może być zadeklarowana w tym zakresie, ponieważ zmieniała by znaczenie zmiennej 'sender' która już istnieje w tym zakresie (lub zakresie wyzej) i oznacza coś innego.". To samo ze zmienną "e". Teraz już rozumiesz?

0

a jak działa ta część kodu?

0

dobra wyrażenia lambda rozumiem ale dlaczego jest (sender2, e2)? Co one wnoszą do instrukcji? Z dokumentacji są to parametry które powinny być przekazane do instrukcji ale te słowa nie występują nigdzie więcej.
Jeszcze mam problem bo instrukcja uruchamia się dopiero po ustalonym czasie a chciałbym aby instrukcja została wykonana od razu po uruchomieniu a później czekała x sekund ido następnego uruchomienia

0

dobra wyrażenia lambda rozumiem ale dlaczego jest (sender2, e2)? Co one wnoszą do instrukcji?

Gdybyś zainicjował timer z normalną metodą timer_tick zobaczyłbyś że metoda ta posiada 2 parametry object sender i costamEventArgs e, jeśli timer.elapsed spodziewa się przyjąć metodę z dwoma parametrami trzeba mu ją dać, mimo że one nie są Ci potrzebne.

Jeszcze mam problem bo instrukcja uruchamia się dopiero po ustalonym czasie a chciałbym aby instrukcja została wykonana od razu po uruchomieniu a później czekała x sekund ido następnego uruchomienia

Odpal timer i zaraz potem sam uruchom tą metodę ogarnietaParWysz.
btw Musisz popracować nad nazwami metod.

0

Coś takiego? Bo to nie daje takiego rezultatu.

 
                _timer.Interval = (30000);
                _timer.Enabled = true; //odpalam timer
                _timer.Elapsed += (sender2, e2) => { ogarnietaParWysz(swit, sort); }; //uruchamiam metodę
0
 _timer.Elapsed += (sender, e) => { ogarnietaParWysz(swit, sort, OrderType, cenaMin, cenaMax, sessionHandle); };
_timer.Enabled = true;
ogarnietaParWysz(swit, sort, OrderType, cenaMin, cenaMax, sessionHandle);

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