我的程序实现的是每隔10秒就调用TCP连接,向服务器获取数据,这个功能的完成我用到了private System.Windows.Forms.Timer timer;控件.在timer的timer_Tick事件里我调用了一个线程:
ThreadStart workerStart=new ThreadStart(run);
Thread workerThread=new Thread(workerStart);
workerThread.Start();
函数viod run():是完成TCP连接服务器获取数据的.
我的问题:当TCP连接出现异常(异常的可能性:服务器关闭),我想要关掉workerThread线程,程序会自动的不断与服务器连接,当连接成功后,这个线程又再次的启动,请问各位大侠,这个功能我该怎么去完成呢?请赐教,小弟新手,请多多谅解!
问题解决马上散分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    貌似比较难!
    多线程操作TCP...异常多~
      

  2.   


    try 
    catch()
    捕获操作啊
      

  3.   

    你现在的做法是不是有代码负责去完成TCP的连接,然后有一个线程利用这个TCP连接去执行操作?这样做是不对的。TCP网络资源应该用的时候去连接,不用的时候立即释放。你把建立TCP连接的操作放在循环的线程中,然后不用Timer,用循环,在循环中判断和上次执行之间的TimeSpan,剩下的就是判断连接是否已经完成,如果没完成TCP连接就不执行延时,即可。
      

  4.   

    我是这样做的:
                //子线程
                bool ISOK = false;
                while (!ISOK)
                {
                    try
                    {
                        //TcpConnect.Connect();
                        //...
                        //TcpConnect.Close();
                        ISOK = true;
                    }
                    catch
                    {
                        Thread.Sleep(30000);30秒后重试
                    }
                    finally
                    {
                        TcpConnect.Close();
                    }
                }
      

  5.   

    出现异常要关闭。则直接在run中return即退出线程。至于“程序会自动的不断与服务器连接,当连接成功后,这个线程又再次的启动”
    不是很明白楼主所指的是什么?如果有一个线程专门负责连接服务器,当它连成功后,可以使用事件.如:AutoEventHandle等通知别一个线程(此线程可以一直处于等待状态)运行。
      

  6.   

    定时多次连接绝对不能在timer里面做的  
    开个线程  控制连接的次数和延时   连接失败 就释放等待
    如果你想一直连接只到成功  就用loop
    取得数据后 等待10秒  再取数据  不需要再连接了把
    如果失败  自己再作处理 是退出还是再连接等
      

  7.   

    TO:meteor007007(流星):
    timer控件不行,用loop,是什么,没有见过,请举例说明怎么用,谢谢
      

  8.   

    大家都说timer控件不行,能不能给介绍个效率高的好方法,有例子更好,谢谢了
      

  9.   

    tasada 的方法就很好,可以把isok换成次数判断,控制连接的尝试次数