Wątek przeniesiony 2015-03-30 03:14 z C# i .NET przez somekind.

Invoke, Delegaty, Aktualizacja textboxa z innego wątku

0

Witam,

Mam problem z interpretacją kodu ze strony https://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp--czesc-2.aspx " Aktualizacja interfejsu z wątku". Nie potrafię zaimplementować go do mojego algorytmu, gdyż chcę się odwołać z całkiem innej klasy. Wytłumaczę po kolei:

Mam metodę statyczną Metoda1 w klasie Klasa1, z której chcę dokonać aktualizacji interfejsu. Metoda1 wywoływana jest z poziomu obiektu Klasa2 podczas uruchamiania nowego wątku przez jedną z metod tej klasy. Obiekt ten jest wywoływany w jednej z metod klasy Form1 i tam też następuje wywołanie metody startującej wątek. Pomimo różnych kombinacji nie mogłem odwołać się do textboxa którego chcę zaktualizować. Mógłby mi ktoś doradzić gdzie mam to wstawić?

0
control.Invoke((MethodInvoker) (() => control.Text = "new text")); 
0

To działa w przypadku, kiedy działam wewnątrz jednej klasy. Niestety w innej klasie nie mam możliwości odwołania się do textboxa :(

0
Złoty Orzeł napisał(a):

To działa w przypadku, kiedy działam wewnątrz jednej klasy. Niestety w innej klasie nie mam możliwości odwołania się do textboxa :(

No i dobrze, TextBox jest szczegółem implementacji danego okna. Między klasami przekazuj dane, a nie szczegóły implementacji.

0

Hmm nie mam pomysłu jak to inaczej zrobić. Wygląda na to że musiałbym przeprojektować klasy. A czy podejście z przekazaniem wskaźnika this jako parametr kolejnych obiektów jest prawidłowe? Zadziałało, ale to taka droga na skróty...

0

Nie jest dobrze, jeśli z każdej klasy odwołujesz się do interfejsu użytkownika.
Interfejs powinien być tak odseparowany, by dało się go całkowicie wymienić (np. z okienkowego na konsolowy) bez ruszania ani linijki kodu w reszcie programu.

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