Zabicie wątku C#

0

Mam kod:

class Program
{
public void Start()
{
thread = new Thread(new ThreadStart(Run));
thread.Start();
}

private void Run()
{
Application.Run();
}

private Thread thread;
}

Zazwyczaj robiłem tak iż miałem dodatkową zmienną typu bool która określała mi czas działania wątku, ale tutaj w osobnym wątku uruchamiam Application.Run(); i nie mogę zastosować tej pomocniczej zmiennej do zabicia tego wątku, dlatego pytam jak prawidłowo zabić taki wątek ?

0

Zabijanie wątków w ten sposób nie jest polecane. Wątek powinien zakończyć się sam.

Dlaczego nie wywołujesz Application.Run w głównym wątku?

0

Właśnie słyszałem, że zabijanie wątków funkcją Abort jest niebezpiecznie, dlatego pytam.

Główny wątek jest przeznaczony do odpierania wiadomości z serwera, chciałbym zrobić tak aby na odpowiednie polecenie serwera, klient uruchamiał Application.Run w osobnym wątku(oprócz tego robi jeszcze to co musi), ale chciałbym również zrobić tak, aby można przerwać działanie tego wątku na polecenie serwera i tu mam problem.

0

Ale jaki to ma sens? Dlaczego główna pętla komunikatów jest uruchamiana w wątku pobocznym, a to, co powinno być w dodatkowym jest uruchamiane w głównym?

Jeżeli nie otwierasz żadnych okien, a z jakiegoś powodu potrzebujesz pętlę komunikatów (potrzebujesz?) to stwórz swoją klasę dziedziczącą po ApplicationContext i przekaż ją do Application.Run(). Wtedy będziesz mógł normalnie zakończyć pętlę wywołując metodę z klasy bazowej: ExitThread().

0

Dlatego że to moduł który będzie wykonywał się w osobnym wątku chcę wykorzystać w kilku swoich projektach, w których nie zawsze będzie komunikacja z serwerem a w których nie chce blokować wątku głównego i dlatego chcę to napisać nie zależnie w osobnym wątku. Wątek działa już jak należy, wszystko jest dobrze, nie wiem tylko jak poprawnie zakończyć jego działanie :(

0

To może inaczej: po co w ogóle wywołujesz Application.Run()? Dlaczego według ciebie jest to wywołanie potrzebne i co ono ma robić? Wyłożyłeś się gdzieś na założeniach.

0

No chyba po to co ta funkcja robi. Zadajesz pytania odbiegające od tematu. Ale okej mam do napisania coś takiego(w skrócie): siedzę sobie na komputerze u siebie i ruszam oraz klikam myszką, informacje o moich kliknięciach są wysyłane do drugiego komputera i na nim wykonywane są takie same operacje myszą. Do tego celu założyłem hooka na mysz, i teraz muszę pobierać komunikaty systemowe o stanie myszy po to wyyołuje Application.Run(). O uruchomieniu i zakończeniu działania modułu odpowiadającemu za wyłapywanie operacji myszy ma decydować serwer.

0

I co Panowie nie ma żadnej metody poza użyciem niebezpiecznej funkcji Abort ?

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