正如标题所暗示的。 是的,我知道这是horribad使用.abort(),但听我把话说完强制关闭'流氓'线程如果中止()不起作用
我使用的是2个线程,主线程(我的应用程序)和插座听线程(熟悉的声音的人?) 而不是使用异步的.AcceptAsync()调用(tbh,主要原因是我没有看太多),我有线程挂在socket.Accept(); Ofcourse,当我调用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设置为true(正如其他论坛主题中所建议的那样),但它没有任何区别。
如果您知道'BeginAccept'和'EndAccept'将解决您的问题,为什么您继续寻求一种不涉及这些方法的解决方案? –
因为我只想要1个连接同时打开。我知道使用async会大量扩展我的代码,所以我认为我会尽可能简单地做到这一点,并像这样做。猜猜这不是一种可能性,那么我只会使用acceptasync。 – Alex