0
我有相當一類使用TcpClient
,在NetworkStream
上旋轉Thread
做while (!streamReader.EndOfStream) {}
。只要TCP連接打開並且沒有可用的數據讀取,EndOfStream
將阻止執行,所以我不知道該怎麼做才能放棄線程外部的讀取。如何停止在NetworkStream上阻塞StreamReader.EndOfStream
由於EndOfStream
阻止,(至少在我的測試它)的設置被稱爲stop
到true
不會做多好獨自一個私有字段,所以我所做的就是以下幾點:
// Inside the reading thread:
try
{
StreamReader streamReader = new StreamReader(this.stream);
while (!streamReader.EndOfStream)
{
// Read from the stream
}
}
catch (IOException)
{
// If it isn't us causing the IOException, rethrow
if (!this.stop)
throw;
}
// Outside the thread:
public void Dispose()
{
// Stop. Hammer Time!
this.stop = true;
// Dispose the stream so the StreamReader is aborted by an IOException.
this.stream.Dispose();
}
這是推薦的方法來中止從NetworkStream
閱讀或有一些其他技術,我可以用來安全(但強制)處置一切?
「由於您已經使用了try/catch,因此會中止線程(導致異常)將被正常捕獲」 - 對於ThreadAbortException,這不是真的。捕捉異常並不妨礙它傳播(就像大多數例外情況一樣)。您需要發出一個Thread.ResetAbort來停止進一步的傳播。 – 2011-04-07 10:51:59