Uzależnienia czasowe- Zdarzenia

Uzależnienia czasowe- Zdarzenia
bloniak91
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Chcę zmieniać co np 1s tekst w Lableu.
Tworzę:

Kopiuj
 private static System.Timers.Timer aTimer;
public MainWindow()
        {
 aTimer = new System.Timers.Timer(10000);

            // Hook up the Elapsed event for the timer.
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

            // Set the Interval to 2 seconds (2000 milliseconds).
            aTimer.Interval = 0.5;
            aTimer.Enabled = true;
}
 public void OnTimedEvent(object source, ElapsedEventArgs e)
        {
           mojlabel.Content("OK");
}

Jednak nie chce to działać. Jak można to poprawić?

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
0
Kopiuj
aTimer.Interval = 1000 ;
// (......) 
label.Text = "OK" 

I nic Ci się nie będzie zmieniać, bo zawsze chcesz wpisywać "OK".

bloniak91
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0
Kopiuj
aTimer.Interval = 1000 ; 

tak miałem. Kod, który wkleiłem akurat był brany na testy;)
rozumiem, że się nie będzie zmieniać, ale jeśli program startuje z mojlablem.COntent="NIE"; to nie zmienia się na "OK". ...

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
0

Skopiuj cały kod z tego przykładu ze stron MS, i zmieniaj w tym kodzie, obserwuj co zmieniasz i jaki to ma skutek :)

bloniak91
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

zmieniłem:

Kopiuj
private static void OnTimedEvent(object source, ElapsedEventArgs e)

na

Kopiuj
public void OnTimedEvent(object source, ElapsedEventArgs e)
        {

ponieważ w metodzie statycznej nie mogę edytować obiektów danej klasy. Resztę mam bez zmian z MS. Znaczy dopisana linijka z napisem w labelu.

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
0

W OnTimeEvent daj:

Kopiuj
mojlabel.Dispatcher.Invoke(() => mojlabel.Content = "OK");

I zapomiałeś o InitializeComponent() w MainWindow()

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
0

Jeśli resztę masz z MS i dopisałeś tylko linijkę z labelem, to ... gdzie umieściłeś ten label? :)

bloniak91
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Jak kopiowałem, to nie zaznaczyłem InitializeComponent(); ponieważ mam za tym jeszcze część innego kodu;)
@dam1an

Kopiuj
mojlabel.Dispatcher.Invoke(() => mojlabel.Content = "OK");

możesz to roztłumaczyć jakoś i napisać jak ma to dokładnie wyglądać?
dostaję taki błąd :
Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type C

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
0

Ma to wyglądać tak:

Kopiuj
public void OnTimedEvent(object source, ElapsedEventArgs e)
        {
           mojlabel.Dispatcher.Invoke(() => mojlabel.Content = "OK");
        }

Chodzi o to że nie można ot tak po prostu zmieniać sobie zawartości labela z innego wątku.

bloniak91
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type
taki błąd wywala :<

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
0

To nie wiem, a w ten sposób:

Kopiuj
        delegate void Del();
        Del myDel;
        private void ChangeLabel()
        {
            label1.Content = "ok";
        }
        public void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            label1.Dispatcher.Invoke(myDel);
            
        }
bloniak91
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

To przeszło, jednak Content labela się nie zmienia :(

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
1

Sorry zapomniałem:

Kopiuj
myDel += ChangeLabel;

to jeszcze gdzieś przed odpaleniem timera w MainWindow()

bloniak91
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Bardzo serdecznie dziękuję za pomoc @dam1an!!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.