Здравствуйте! Пишу клиент-серверное приложение, в котором передаются файлы по сети. Собственно, само приложение работает хорошо, задачи выполняет, но когда я закрываю серверную часть, то программа виснет.
Вот код серверной части:
NetworkStream myns;
TcpListener mytcpl;
Socket mysocket;
Thread myth;
BinaryReader bb;
void File_Receiver()
{
mytcpl = new TcpListener (7000);
mytcpl.Start ();
mysocket = mytcpl.AcceptSocket ();
myns = new NetworkStream (mysocket);
BinaryFormatter br = new BinaryFormatter ();
object op;
op= br.Deserialize (myns); // Deserialize the Object from Stream
bb = new BinaryReader (myns);
byte[] buffer = bb.ReadBytes(5000000);
FileStream fss = new FileStream(@textBox1.Text + (string) op, FileMode.CreateNew, FileAccess.Write);
fss.Write(buffer,0,buffer.Length);
fss.Close();
mytcpl.Stop();
listBox1.Items.Add ("Successfully Saved to: " + textBox1.Text + (string) op);
if (mysocket.Connected ==true)
{
while (true)
{
File_Receiver();
}
}
}
Также я определил, что зависание происходит при закрытии формы на соответсвующем обработчике этой формы:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
myth.Abort ();
mytcpl.Stop ();
}
Когда закрываю программу, например, через Alt+F4, и она просто повисает и караул! Помогите, пожалуйста, победить это проблему.
P.S.
Да, нити запускаются как положено в обработчике формы и работают хорошо, пока не пытаюсь закрыть форму:
private void Form1_Load(object sender, System.EventArgs e)
{
myth= new Thread (new System.Threading.ThreadStart(File_Receiver));
// Start Thread Session
myth.Start ();
}
Уже не знаю в какую сторону копать.