.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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д