Как видно из названия.Да, я знаю, что ужасно использовать .abort (), но выслушайте меня
Я использую 2 потока: основной поток (моего приложения) и поток прослушивания сокета (знакомый звук кому-нибудь?) Вместоиспользуя асинхронные вызовы .AcceptAsync () (tbh, основная причина в том, что я не слишком внимательно их изучал), у меня поток просто зависает на socket.Accept ();Конечно, когда я вызываю thread.Abort (), поток не закрывается, потому что он все еще ожидает соединения, после того, как он пройдет Accept (), он прекратит работу очень хорошо.
Код:
void listenserver()
{
while (run)
{
fConsole.WriteLine("Waiting for connections..");
connectedsock = mainsock.Accept();
connected = true;
fConsole.WriteLine("Got connection from: " + connectedsock.RemoteEndPoint);
... и в других местах:
private void button_start_Click(object sender, EventArgs e)
{
if (!run)
{ //code ommitted.
}
else
{
run = false;
listenthread.Join(3000);
if (listenthread.IsAlive)
{
fConsole.WriteLine("Force-closing rogue listen thread");
listenthread.Abort();
}
button_start.Text = "Start";
groupBox_settings.Enabled = true;
}
есть ли какой-нибудь способ убедиться, что поток закончится, а не наполнить все этов отдельном приложении, а затем окончание этого?Обратите внимание, что у меня действительно есть тема thread.IsBackground (как предложено в других темах форума), однако это не имеет никакого значения.