Wątek UI

0

Gdy mam Formę, to mogę zrobić form.Invoke aby zrobić coś w wątku UI.
Co gdy nie mam formy, tylko obiekt, który stworzył sobie nowy wątek?

0

Pokaż kod albo narysuj, bo opis jest abstrakcyjny dość. ;)

0

Jest klasa

public class Connection

W Form1

connection = new Connection(/*parametry*/);
                    connection.Run();

No i w sumie nie wiem gdzie mam zadefiniować obiekt

Connection connection

żeby po zamknięciu Form1 (ta forma bedzie widoczna tylko chwilę, do kontaktu z userem w sprawie parametrów.) obiekt dalej istniał.

W tej klasie Connection jako pole wątek

Thread rec;

który jest uruchamiany gdy nawiąże się połączenie

if (IsConnected)
            {
                try
                {
                    rec = new Thread(new ThreadStart(Receive));
                    rec.Start();

Podczas odbierania danych w tym wątku (funkcja najbardziej backendowa ta Receive) wywołanie dla odebranych danych

GetMessage(string s);

No i ta funkcja GetMessage chciałbym aby nie była w tym samym wątku (czyli Thread rec), bo w niej musze mieć dostęp do UI. W funkcji tej tworze Form2 (wiele instancji) tzn mam zadeklarowaną listę w klasie

List<Form2> formy2 = new List<Form2>()

I odwołuję się w tej funkcji GetMessage do rzeczy dotyczących tych foremek.
Chodzi o to, by nie wywoływać dla Form2 za kazdym razem Invoke bo jest w GetMessage bardzo duzo odwolan do tych Form2, tylko aby GetMessage bylo w tym wątku co Form2 czyli UI. Wtedy bedzie prosciej.
Troche to zagmatwane, mam nadzieję że rozumiesz.

0

Możesz na przykład w klasie Connection zdefiniować delegaty/eventy. Klasa UI będzie odbierać eventy i tam sobie zrobisz invoke w razie potrzeby i odwołasz się do gui.

0

Za dużo było by roboty z Eventami, zresztą źle że tworzyłem Formy w innym wątku...

Ustawiłem żeby była główna forma programu, która tworzy obiekt Connection i z niej daje Invoke.

Owner.Invoke(new Action(delegate() { Owner.connection.GetMessage(s); }));

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