У меня есть соединение с IRC-сервером через TCP. До сих пор я читал данные с независимой задачей. Однако, если я хочу выйти из программы, я не могу выйти из потока, потому что он застрял в read.ReadLine() команда (threadShouldRun не имеет никакого влияния). Использование Interrupt() или Abort() тоже ничего не меняет.Пытается прервать поток, застрявший в reader.readLine()
Либо мне нужно, чтобы определить, когда есть больше строк для чтения, или мне нужно принудительно убить поток (хотя это плохо).
private System.Threading.Thread myThread;
private bool threadShouldRun = true;
private StreamReader reader;
private void readStream()
{
while(threadShouldRun)
{
string line = reader.ReadLine();
if (line != null)
{
newLineEvent(this, new NewLineEventArgs(line));
}
}
}
Вы делаете это неправильно - если вы получили TCP сообщение, которое вы должны реагировать - вы должны использовать сокеты. Я не думаю, что вы сможете изящно закончить ожидание 'ReadLine'. –
Довольно непонятно, что читает * читатель *. Но если это сетевой поток, вы можете просто остановить его, закрыв сокет. Будьте готовы поймать исключение. –