.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();
}