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 :)