Button - zmiana koloru w innym wątku?

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!

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

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