像高手们请教个问题,C#中终止线程有几种方法?我用的是 .Abort(),但是我的线程里有语音和Socket通讯,线程好像就没有立即停止,而是等到Socket通讯完或语音播报完才停止?
有什么方法可以解决呢?

解决方案 »

  1.   

    用Abort是可以的,就是非常别扭。这里我推荐一个方法,利用Environment.Exit(0)即可。我在我的飞鸽传书中,使用很正常。
      

  2.   

    sleep()//是睡眠 里面写事件 然后.wake 就叫醒! .stop()是终止!...
      

  3.   

    Abort()方法终止线程的时候,会等待线程完成一些正在进行的操作。。
      

  4.   

    Abort()方法终止线程的时候,确实会等待线程完成部分工作后再终止。。
    建议:
    自己设置一个标志,如:bool isRunning = false;
    在线程开始的时候设置:isRunning = true;
    在线程结束的时候设置:isRunning = false;
    所有操作均判断:
    if(isRunning)
    {
    //执行动作;
    }
    这样的话,就不怕Abort带来的延迟了
      

  5.   

    C#简单线程收集
    C#中的多线程使用--使用回调函数从一个线程中检索数据
    C#中的多线程使用--Thread类
      

  6.   

    先谢谢大家,但问题还是没有解决呀,的确可以设个bool变量来标示下,但想Socket通讯这样还是得等到它超时,重点就是想立即终止这种能延迟性高的线程。
    网上看到了个关于Socket通讯线程立即终止的方法,就是终止线程时对自己发个信息(例如'1'),再把Socket线程里对返回的信息进行判断(为'1'就退出)。方法是行,但总感觉不是最好的方法。
    还有就是线程中有语音怎么办,因为语音要循环所以要阻塞到语音播放完,这里怎么判断呀,总不能把一句话裁成"一个字一个字播放再判断"的吧?
      

  7.   

    那个...MSDN上的我早就已经看过了,并没有解决我的问题。