Komunikacja między wątkami, dostęp do lokacji elementu.

0

Witam
Mam prawdopodobnie dość prosty problem dotyczący wieląwątkowości w C# , czytam ostatnio dużo na ten temat ale w zasadzie opisywana jest tylko synchronizacja miedzy wątkami.
Sam projekt to z tego co słyszałem dość powszechny temat czyli przejazd kolejowy, jeden wątek to samochów drugi pociągi no i oczywiście szlaban.

Powiedzmy, że mam utworzony picturebox1 w wątku głownym i chce zainicjować ruch po przez wciśniecie button1. Wydaje mi się że najprostszą możliwą opcja była by taka funkcja dla wątku:

 
        private void Operation()
        {
            for (int i = 0; i < 50; i++)
            {
                pociag.Location = new Point(pociag.Location.X + 2, pociag.Location.Y);
                Thread.Sleep(50);
            }
            MessageBox.Show("pociąg przejechał");
        }

I z tego sie co sie orientuje wątek nie może zmienić czegoś co zostało utworzone w innym wątku.
Z czego powinienem zskorzystać?

Pozdrawiam Kamil

1

Żeby z pobocznego wątka odwołać się do kontrolki (np. PictureBox) trzeba sprawdzić InvokeRequired na tej kontrolce i jeśli jest true to użyć Invoke.

0

Przykład użycia Invoke:

	void foo()
	{
		if (pictureBox1.InvokeRequired)
			pictureBox1.Invoke(new MethodInvoker(foo));
		else
		{
			// reszta kodu
		}	
	}

Metoda foo może być wywołana z dowolnego wątka (także z głównego) i będzie działać.

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