Aplikacja nie zamyka się całkowicie.

0

Cześć,

Zrobiłem aplikacje serwera TCP i wszystko działa ok tylko problem pojawia się gdy chce wyłączyć aplikacje.

Klikając w "X" okno znika ale proces aplikacji dalej jest w tle. Ponowne uruchomienie jest niemożliwe. W VS muszę ją "ręcznie" zamykać.

 

 public Form1()
        {
            InitializeComponent();

            Thread tcpServerRunThraed = new Thread(new ThreadStart(TCPserverRun));
            tcpServerRunThraed.Start();


        }

  public void TCPserverRun()
        {

            TcpListener tcpListner = new TcpListener(IPAddress.Any, 5004);
            tcpListner.Start();
            updateUI("Listenig");

            while (true)
            {
                TcpClient client = tcpListner.AcceptTcpClient();
                Thread tcpHandlerThread = new Thread(new ParameterizedThreadStart(tcpHandler));
                tcpHandlerThread.Start(client);
                
            }

  
        }

        public void tcpHandler(object client)
        {
            TcpClient mClient = (TcpClient)client;
            NetworkStream stream = mClient.GetStream();

            byte[] message = new byte[1024];
            stream.Read(message, 0, message.Length);

           [....]
            


        }



0

bo nie kończysz wątku przy zamykaniu aplikacji

0

Mógłbyś coś podpowiedzieć bo nie bardzo wiem jak to zrobić ?

0

W konstruktorze robisz tcpServerRunThraed.Start(); a nigdize nie ma tcpServerRunThraed.Stop();

0

Próbując to wykonać przy zamykaniu dostawałem info, że "nazwa nie występuje w..."

dodanie

tcpServerRunThraed.IsBackground = true;
 

rozwiązało sprawę połowicznie.

0
abrakadaber napisał(a):

@FakeAccount a skąd żeś to stop wytrzasnął???

Nie wiem, strzelałem, nie uzywalem Threads od ohoho. Po to jest w .Necie TPL i Taski, zeby nie gmatwać sie surowymi wątkami

0

@adam_c czy to naprawdę takie trudne skopiować do swojego kodu w sumie 6 (SZEŚĆ) linijek kodu (razem z klamrami!)

public void DoWork()
{
while (!_shouldStop)
{
Console.WriteLine("worker thread: working...");
}
Console.WriteLine("worker thread: terminating gracefully.");
}

public void RequestStop()
{
_shouldStop = true;
}

private volatile bool _shouldStop;


BTW jeśli nie masz pojęcia o wątkach, a widać, że nie masz żadnego, to najpierw wypadało by jakieś pojęcie zdobyć zamiast klikać na pałę...

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