我有代码如下:
private void button1_Click(object sender, System.EventArgs e)
{
thdSvr=new Thread(new ThreadStart(this.ThreadServer)); 
thdSvr.IsBackground=true;
thdSvr.Start();
}
private void ThreadServer()
{
client=new IPEndPoint( serIP,2288);
server=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
server.Blocking=true;
server.Bind(client);
server.Listen(100);
while(intGuan==0)
{t=server.Accept();
...............
}
}
请问,由于我是adsl,IP经常变,我希望程序可以过一段时间从新检验一下IP有没有变,可是我在判别IP不同后加入
thdSvr.Abort();
thdSvr.Start();
结果告诉我线程正在运行或者已经停止错误.我该如何改才能实现我的需求?

解决方案 »

  1.   

    thdSvr.Abort();后就释放了,没有了,应该用
    thdSvr.Suspend();
    thdSvr.Resume(();
      

  2.   

    我用thdSvr.Suspend();
    thdSvr.Resume(();
    好像不刷新IP地址呀
      

  3.   

    把你的代码重构一下:void StartAcceptThread()
    {
             // 关闭老线程
             if (thdSvr != null)
             {
                   intGuan = -1;// 控制循环变量让线程循环退出
                   
                   /*用 socket 向自己发送一个 Connect() 请求,让 Accept 返回,并退出循环
                   ... 此处不给出代码,留给楼主自己写 ...
                   */
                  
                   thdSvr = null;
             }         // 启动新线程
    thdSvr=new Thread(new ThreadStart(this.ThreadServer)); 
    thdSvr.IsBackground=true;
    thdSvr.Start();
    }private void button1_Click(object sender, System.EventArgs e)
    {
        StartAcceptThread();
    }
      

  4.   

    不好意思,这个方法不行,我发现用完// 启动新线程
    thdSvr=new Thread(new ThreadStart(this.ThreadServer)); 
    thdSvr.IsBackground=true;
    thdSvr.Start();
    线程也不再运行了.
      

  5.   

    可能是因为你之前的Socket没有正常关闭
      

  6.   

    >>... 线程也不再运行了...什么意思啊?是老线程再运行还是新线程不能运行?新线程不能运行可能是 老Socket没有释放,Accept 不能成功!所以我才要你执行下面这些代码释放Socket的嘛:/*用 socket 向自己发送一个 Connect() 请求,让 Accept 返回,并退出循环
                   ... 此处不给出代码,留给楼主自己写 ...
                   */