起了10个线程,调用另一个函数来启动client
Thread[] t=new Thread[10];
for(int i=0;i<10;i++)
{
    t[i]=new Thread(new ThreadStart(ConnectToServer));
    t[i].Start();
}void ConncectToServer()
{
    //启动新的Client
    //....
    Client client=new Client();
}启动成功后,经过一系列的处理,需要对这些client进行释放,在单线程下是直接调用Disconnect()函数就可以了,在多线程下怎么处理,需要对每个线程的资源进行释放。小弟刚接触多线程,还请大侠们赐教!

解决方案 »

  1.   

    将线程设置为后台运行(IsBackground=true),线程数组在构造函数调用时初始化,然后用一个方法调用线程执行
    在整个程序退出时,线程将自动消毁,可在ACTION中设置一个标记令执行其的线程暂停,如
    while(true)
    {
     if( !isStop )
     {
      执行
     }
     Thread.Sleep(1);//调用线程暂停,避免CPU占用率100%
      

  2.   

    可以在ConncectToServer方法结尾的时候销毁client
      

  3.   

    这个不可以的,连接到服务器后需要保持一段时间,直到用户想要结束时才能结束,所以这个中间时间有多长时不确定的,不能在连接到服务器之后立马断开连接,销毁client
      

  4.   

    Client client = new Client();
    while(IsRunning)
    {
        ....
    }
    client.Disconnect();
    这样不就完了么?
      

  5.   

    while循环里的语句不是有我来决定的,而是由客户来决定。比如客户在建立连接之后可能要执行method1,method2,和method3函数,但这三个函数的执行顺序是由客户端来自己决定,我不能在一个函数内把建立client和关闭client全部写死。
      

  6.   

    执行就执行啊,关外面的while什么事?
      

  7.   

    首先这个IsRunning是什么,是指判断线程是否存在么,启动线程的时候调用这个函数,建立client,怎么在函数体内判断线程?另外,我根本就不知道该执行什么,while循环里面的语句根本就不确定是什么,这让我怎么写,怎么判断while循环什么时候结束?
      

  8.   

    客户端结束是客户点击结束按钮,里面调用Disconnect函数,在单线程里面是这么做的,没有什么问题,现在是想把它改成多线程的。
      

  9.   

    客户端断开
    服务器会收到断开事件吧
    然后把IsRunning=false不就OK?
      

  10.   

    托管代码会自动释放的,要不你就 
    Using(.................)
    {
    //todo
    }