我在c#里面进行socket通讯,是侦听端。在程序退出的时候使用了this.Dispose();Process[i].CloseMainWindow();Process[i].Kill();Process[i].WaitForExit();等方法,可是退出后,进程仍然不能关闭。在任务管理器里面仍然有这个进程。重起程序,就不能侦听了,说是端口已被占用。据说是c#的bug,有没有方法解决啊,比如调用SDK的函数什么的。请哪位高手指点一下!

解决方案 »

  1.   

    请说出具体实现socket.dispose的方法
      

  2.   

    socket没有dispose方法啊,dispose是受保护的方法,怎么实现?
      

  3.   

    (socket as IDisposable).Dispose(); // 不好意思刚才没注意这个问题
      

  4.   

    我的程序叫做socket.exe,程序退出后任务管理器里面有一个socket.exe的进程无法关闭,只能自己手工关闭
      

  5.   

    最后加这个试一试
    Application.Exit();
      

  6.   

    感谢Sunmast(速马/READY TO ROCK)!我的程序进程虽然没有关掉,但是重启后socket侦听没有问题了。能否继续帮忙解决一下,我的QQ是30966051,希望你能加我!
      

  7.   

    tskill能查杀进程,xp系统自带的, 语法很简单:tskill 程序名
      

  8.   

    你的问题是在于监听模式是阻塞的,socket.Dispose()虽然释放了socket的资源,但是监听进程还是在阻塞状态。我原来也碰到过这个问题。我解决的办法是在关闭的时候,自己向自己发送一条消息。阻塞的监听就可以释放了。
      

  9.   

    不好意思,应该是线程,这个线程终止不掉,所以你的socket.exe还在。你试一下。
      

  10.   

    socket.exe??那直接kill还不行啊?
      

  11.   

    happycharles,请具体说一下自己向自己发消息的思路,我有点不太理解,谢过!