正如標題所暗示的。 是的,我知道這是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