Button - zmiana koloru w innym wątku?

Odpowiedz Nowy wątek
2006-09-16 20:50

Rejestracja: 13 lat temu

Ostatnio: 8 lat temu

0

Witam! Mam następujący problem:

Zależy mi na zmianie koloru przycisku (a konkretnie klasy która dziedziczy po Button), ale tylko na chwilę.
Więc robię too tak:

przycisk.ZmienKolor(); //metoda, ktora oprocz zmiany koloru jeszcze cos robi
Thread.sleep(1000);

//dalszy ciag programu

No i problem jest tego typu, ze owszem czeka tą sekundę i wykonuje dalej program, ale nie dochodzi do zmiany koloru. Może tu jest coś z wątkami? No ale jakby zmiana koloru była w innym, to by przecież tym bardziej to zrobił... nie wiem i proszę o pomoc!


Pozostało 580 znaków

t3q
2006-09-16 23:37
t3q

Rejestracja: 13 lat temu

Ostatnio: 13 lat temu

0
psur napisał(a)

Witam! Mam następujący problem:

Zależy mi na zmianie koloru przycisku (a konkretnie klasy która dziedziczy po Button), ale tylko na chwilę.
Więc robię too tak:


przycisk.ZmienKolor(); //metoda, ktora oprocz zmiany koloru jeszcze cos robi
Thread.sleep(1000);

//dalszy ciag programu

> 
> No i problem jest tego typu, ze owszem czeka tą sekundę i wykonuje dalej program, ale nie dochodzi do zmiany koloru. Może tu jest coś z wątkami? No ale jakby zmiana koloru była w innym, to by przecież tym bardziej to zrobił... nie wiem i proszę o pomoc!

Miałem kiedyś podobny problem, ale dotyczył on label'a. Z tego co pamiętam, u mnie wyglądało to tak. Watek generował zdarzenie ( Event ):
    public delegate void CostamEventHandler( JakisObiekt d, CostamEventArgs e );
    public event CostamEventHandler CosSieZdarzyloEvent;

(...)
CosSieZdarzyloEvent( this, eArgs );


W tym evencie robiłem BeginInvoke do funkcji która modyfikowała labela.

Coś w tym stylu:
    /// <summary>
    /// Poniewa? ten fragment
    /// wywo?ywany jest z innego w?tku zastosowany zosta? tutaj trik z
    /// u?yciem Controls.BeginInvoke.
    /// </summary>
    /// <param name="d">Obiekt powodujacy zdarzenie</param>
    /// <param name="a">Argumenty przekazane przez zdarzenie</param>
    private void OnCardApplayed ( CardDevice d, CardDevice.CardDeviceEventArgs a )
    {
        // Wrap the parameters in some EventArgs-derived custom class:
        object[] pList = { d, a };

        BeginInvoke(new CardDevice.DeviceEventHandler ( UIUpdate_OnCardApplayed ), pList );
    }

przy czym:
    private void UIUpdate_OnCardApplayed ( CardDevice d, CardDevice.CardDeviceEventArgs a )
    {

            this.labelGuide.Text = komKarta2;
            this.Update();
            (...)
    }


Mam nadzieje, że moje podpowiedzi podprowadzą Cię do ostatecznego rozwiązania :)

Pozostało 580 znaków

Odpowiedz

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