@Stels007

C# Как решить проблему зависания программы?

Здравствуйте! Пишу клиент-серверное приложение, в котором передаются файлы по сети. Собственно, само приложение работает хорошо, задачи выполняет, но когда я закрываю серверную часть, то программа виснет.

Вот код серверной части:

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 ();
         }

Уже не знаю в какую сторону копать.
  • Вопрос задан
  • 323 просмотра
Пригласить эксперта
Ответы на вопрос 1
@NonameProgrammer
Либо в отдельный поток, либо доп.условие
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы