Kolejka metod dla wątku.

0

Czy mogę w jakiś .Net'owy sposób dodawać kolejne metody, które chcę aby wątek wykonał, gdy tylko skończy robić to, co robi w danej chwili? Coś na takiej zasadzie:
myThread.Invoke(mojaMetoda1);
i teraz, gdy myThread jeszcze wykonuje mojaMetoda1, w głównym wątku programu wykonam kod:
myThread.Invoke(mojaMetoda2),
po to, aby po skończeniu wykonywania mojaMetoda1, wykonał mojaMetoda2.
Da się coś takiego osiągnąć w prosty sposób? Jak nie w prosty, to jaki?

1

Możesz skorzystać z klasy Task i metody ContinueWith jeśli nie musi być koniecznie klasa Thread

0

Próbowałem jak kolega polecił Taskami, jednak gdy wywołuję Metodę ContinueWith, to mój kod jest wykonywany od razu, a nie dodawany na koniec kolejki. Mogę jakoś sprawić, aby kod ten wykonał się dopiero gdy wykonają się pozostałe, wcześniej ustawione na kontynuację metody?
Teraz, przy takim wywołaniu kodu, najpierw pojawi się MessageBox z treścią krótki, a chcę aby po 5s pokazał się długi, a potem po 1s krótki.

            Task t = new Task(new Action(delegate { }));
            t.Start();
            t.ContinueWith(new Action<Task>(delegate
            {
                Thread.Sleep(5000);
                MessageBox.Show("Długi DONE");
            }));
            t.ContinueWith(new Action<Task>(delegate
            {
                Thread.Sleep(1000);
                MessageBox.Show("Krótki DONE");
            }));
2

ContinueWith nie tworzy kolejki tylko robi dokładnie to, na co wskazuje jej nazwa - wywołuje podane zadanie po wykonaniu zadania, na którym wywołujesz metodę. Obie te metody wywołujesz na pierwszym zdarzeniu, a chcesz, żeby trzecie wykonało się po drugim (a nie pierwszym).
ContinueWith zwraca nowo stworzony Task. Wywołaj trzecie ContinueWith na wyniku wywołania drugiej.

ps. uważaj z wywoływaniem metod odnośnie wątków. Zadanie (promesa) wcale nie oznacza, że zawsze zostanie stworzony nowy wątek!

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