Mam pewien problem z kończeniem aplikacji klienta. Może najpierw troszkę kodu:
private void Work()
{
ThreadStartCln(true);
Cln = new TcpClient(host.Text, 8001);
Cln.ReceiveTimeout = 5;
byte[] buff = new byte[1024];
while (work)
{
try
{
string cmd = en.GetString(buff, 0, Cln.Client.Receive(buff));
ThreadAppendText(cmd);
}
catch (Exception)
{
}
}
Cln.Close();
Cln = null;
ThreadStartCln(false);
}
Jest to metoda nasłuchująca odpowiedzi serwera. Zgodnie z moim założeniem przy zmianie pola work na false w głównym wątku miało spowodować wyjście z pętli i zakończenie wątku. Wszystko to miało być kontrolowane przez zaznaczenie i odznaczenie checkboxa.
private void btnConnect_CheckedChanged(object sender, EventArgs e)
{
if (!Th.IsAlive)
{
work = true;
Th.Start();
}
else
{
work = false;
Th.Join();
}
}
Wątek ładnie się rozpoczyna i gdy działa, to po zmianie zaznaczenia wchodzi w blok else, jednak wygląda to tak jakby Work() nie widział, że work jest ustawione na false przez co wątek główny jest zablokowany bo ciągle czeka na zakończenie Th. Coś czuję, że mogłem jakiś oczywisty błąd popełnić. Z góry dziękuję za pomoc.