由于项目需要,我的项目中要用到多线程。在系统中我共开启了5个线程
在开始时,我是使用Suspend()和Resume()来挂起和开启线程,但在2.0中
系统已经将这连个对象视为过时(防止死锁的发生)。请问大家有没有好的解决方法
代替它们,例如用Monitor、Mutex等来挂起所有的线程和继续开启所有线程。谢谢了!

解决方案 »

  1.   

    俺的做法:在线程中使用变量控制stop/run,使用线程:Join等待全部线程执行结束
      

  2.   

    Thread.Suspend和Thread.Resume被废弃 
    实例函数Thread.Suspend和Thread.Resume在2.0版本下被标为obsolete.编译使用这2个函数的代码会得到
    使用System.Threading中的其他类,如Monitor,   Mutex,   Event,   和Semaphore,以同步线程和保护资源。 
    Thread.Suspend和Thread.Resume被废弃的主要原因是因为其使用很容易造成线程死锁(Deadlock)。 
    Thread.Sleep的使用在.NET   2.0下不受影响。
      

  3.   

    参考下这里的文章:
    http://www.cnblogs.com/xd125/archive/2007/12/12/992406.html
      

  4.   


    我知道不能用,系统容易出现死锁。
    虽然Thread.Sleep是可以用,但用户暂停的时间有多长呢?我们不清楚。
    不可能将sleep值设置非常大然后去等吧。
    我那问题是5个线程同时访问一个泛型对象,并发的问题解决了,
    现在就是如何挂起所有线程和继续所有所有线程。谢谢大家,请大家出出注意!
      

  5.   

    ...我那问题是5个线程同时访问一个泛型对象...
    由泛型对象来保护它自己,这简化了多线程处理。...挂起所有线程和继续所有所有线程...
    要合理的管理线程,重要的一点是管理任务的颗粒性,就是要能够把一个长的任务分解成一些小的任务。
    每次做完小任务后,查阅调度者的通知,并根据通知进行等待,或继续执行,比如下面的玩具例子:
    volatile bool paused;
    ManualResetEvent resumeEvent = new ManualResetEvent(false);void MyThread()
    {
        for (int i = 0; i < 100; i++)
        {
            if (paused)
            {
                resumeEvent.WaitOne();
            }        DoWork();
        }
    }void Pause()
    {
        resumeEvent.Reset();
        paused = true;
    }void Resume()
    {
        paused = false;
        resumeEvent.Set();
    }