首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

多线程退出有关问题

2011-12-30 
多线程退出问题在VS2005下开发了一个客户端与服务端通信的程序!我在客户端程序中使用了多线程!可是在客户

多线程退出问题
在VS2005下开发了一个客户端与服务端通信的程序!
我在客户端程序中使用了多线程!
可是在客户端程序关闭后,仍占用系统部分系统资源!
只有在服务端程序进程终止之后,客户端资源才可以得到释放!
请问是什么原因?
客户端程序代码:
private   IPAddress   myIP   =   IPAddress.Parse( "192.168.0.1 ");
private   IPEndPoint   MyServer;
private   Socket   sock;
private   bool   bb   =   true;

public   string   recvStr   =   " ";     //接收到字符串

public   Thread   thread;

private   void   btnCon_Click(object   sender,   EventArgs   e)
{
          MyServer   =   new   IPEndPoint(myIP,   Int32.Parse( "8888 "));
          sock   =   new   Socket(AddressFamily.InterNetwork,   SocketType.Stream,   ProtocolType.Tcp);
          sock.Connect(MyServer);

          this.statusBar1.Text   =   "与主机连接成功! ";

          thread   =   new   Thread(new   ThreadStart(targett));
          //   thread.IsBackground   =   true;
          thread.Start();
}
public   delegate   void   MyOkInVoke(string   str);

private   void   targett()
{
      while   (bb)
      {
            Byte[]   bbb   =   new   Byte[1024];
            string   aa   =   " ";
            int   bytes;
            bytes   =   sock.Receive(bbb,   bbb.Length,   0);
            aa   +=   System.Text.Encoding.Default.GetString(bbb,   0,   bytes);

            recvStr     =   recvStr+aa;
            //传递参数
            MyOkInVoke   okCon   =   new   MyOkInVoke(CreateNewForm);
            this.BeginInvoke(okCon,   new   object[]   {   recvStr   });
      }          
}                
public   void   CreateNewForm(string   str)
{
          this.txtRecv.Text   =   recvStr;   //刷新接收数据文本框
          this.txtRecv.Update();
}

private   void   btnSend_Click(object   sender,   EventArgs   e)//发送数据
{
        Byte[]   bytee   =   new   Byte[1024];
        string   send   =   this.txtSend.Text.ToString();
        bytee   =   System.Text.Encoding.Default.GetBytes(send.ToCharArray());
        sock.Send(bytee,   bytee.Length,   0);
}
private   void   btnClose_Click(object   sender,   EventArgs   e)//关闭连接中断线程
{
        try
        {
              sock.Close();
              thread.Abort();

              this.statusBar1.Text   =   "与服务器断开连接! ";


        }
      catch   {   MessageBox.Show( "连接尚未建立,断开无效! ");   }
}




[解决办法]
退出时 bb=false;

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

最新版本:20070212

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
[解决办法]
用Environment.Exit
[解决办法]
while (bb)
{
Byte[] bbb = new Byte[1024];
string aa = " ";
int bytes;
bytes = sock.Receive(bbb, bbb.Length, 0);
aa += System.Text.Encoding.Default.GetString(bbb, 0, bytes);

recvStr = recvStr+aa;
//传递参数
MyOkInVoke okCon = new MyOkInVoke(CreateNewForm);
this.BeginInvoke(okCon, new object[] { recvStr });
}

问题在这,因为你的程序和此线程是并行的,所以程序退出后,此程序并没有结束.一般方法是,程序退出前要向server发退出命令,server回一个确认后,把bb=false;就可以正常退出了。

热点排行