Я реализовал TCP-клиент, используя поток, открывающий сокет для сервера и считывающий данные с него синхронно.
Когда строка String thisLine = aReadStream.ReadLine();
блокируется из-за отсутствия данных для чтения из сокета, и я пытаюсь выполнить Thread.Abort
для уничтожения потока (поскольку он заблокирован в этом ReadLine ()), я ожидаю, что смогу перехватить 1003 * НО Не могу.
Поток остается заблокированным на этом ReadLine()
и не уничтожается.
Ниже кода, который я использую в своей теме.
Знаете ли вы, почему и что я делаю неправильно и что нужно сделать, чтобы разблокировать этот ReadLine ()?
private void readSocket_andTriggerEvents()
{
TcpClient aClient = null;
try
{
aClient = new TcpClient();
aClient.Connect(_HOST, _PORT);
Trace.WriteLine("Socket Connected");
NetworkStream aStream = aClient.GetStream();
StreamReader aReadStream = new StreamReader(aStream);
int nTimes = 0;
while (this.isSocketThreadStarted)
{
String thisLine = aReadStream.ReadLine(); // when no data
// is available the application hangs here.
// Thread.Abort doesn't work!
}
}
catch (ThreadAbortException ex)
{
Trace.WriteLine("The Thread was brute-forced killed");
// I never come here!!
}
catch (SocketException ex)
{
Helper.ShowErrorMessage(ex);
}
finally{
aClient.Close();
Trace.WriteLine("socket closed");
}
}