.NET 4.x Как остановить поток? - C#

Узнай цену своей работы

Формулировка задачи:

Я видел подобную тему но применить это к своей программе я не сумел. У меня есть класс клиент и несколько методов, один из методов открывает поток, нужно создать метод который будет останавливать поток. Вот код. Если нужно могу кинуть папку с проектом.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace Client_Chat
{
    class Client
    {
        bool progress = false;
        static TcpClient client;
 
        public Client(int Port, string connectIp)
        {
            client = new TcpClient();
            client.Connect(IPAddress.Parse(connectIp), Port);
        }
 
        public void Work()
        {
            Thread clientListener = new Thread(Reader);
            clientListener.Start();
        }

        public void SendMessage(string message)
        {
            message.Trim();
            byte[] Buffer = Encoding.ASCII.GetBytes((message).ToCharArray());
            client.GetStream().Write(Buffer, 0, Buffer.Length);
            Form1.messege.Add(message);
        }

        static void Reader()
        {
            while (true)
            {
                NetworkStream NS = client.GetStream();
                List<byte> Buffer = new List<byte>();
                while (NS.DataAvailable)
                {
                    int ReadByte = NS.ReadByte();
                    if (ReadByte > -1)
                    {
                        Buffer.Add((byte)ReadByte);
                    }
                }
                if (Buffer.Count > 0)
                {
                    Form1.messege.Add(Encoding.ASCII.GetString(Buffer.ToArray()));
                }
            }
        }
    }
}
Решил проблему созданием списка потоков и добавлением нового потока в список.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace Client_Chat
{
    class Client
    {
 
        List<Thread> threads = new List<Thread>();
        static TcpClient client;
 
        public Client(int Port, string connectIp)
        {
            client = new TcpClient();
            client.Connect(IPAddress.Parse(connectIp), Port);
        }
 
        public void Work()
        {
            Thread clientListener = new Thread(Reader);
            clientListener.Start();
            threads.Add(clientListener);
        }
 
        public void Stop()
        {
            foreach (Thread t in threads)
            {
                t.Abort();
            }
        }
 
        public void SendMessage(string message)
        {
            message.Trim();
            byte[] Buffer = Encoding.ASCII.GetBytes((message).ToCharArray());
            client.GetStream().Write(Buffer, 0, Buffer.Length);
            Form1.messege.Add(message);
        }

        static void Reader()
        {
            while (true)
            {
                NetworkStream NS = client.GetStream();
                List<byte> Buffer = new List<byte>();
                while (NS.DataAvailable)
                {
                    int ReadByte = NS.ReadByte();
                    if (ReadByte > -1)
                    {
                        Buffer.Add((byte)ReadByte);
                    }
                }
                if (Buffer.Count > 0)
                {
                    Form1.messege.Add(Encoding.ASCII.GetString(Buffer.ToArray()));
                }
            }
        }
    }
}

Решение задачи: «.NET 4.x Как остановить поток?»

textual
Листинг программы
foreach (Thread t in threads)
 {
    t.Abort();
 }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.455 из 5
Похожие ответы