看一下ReaderWriterLock 是不是适合你。。或者用事件

解决方案 »

  1.   

    有点长~~我把辅线程的..贴出来public void get_data()
                {
                    int num1, num2;
                    Random rand = new Random();          //随机数                while (true)
                    {
                        mUnique.WaitOne();
                        mUnique.Close();
                        do
                        {
                            num1 = rand.Next(6);
                        } while (num1 == 0);
                        do
                        {
                            num2 = rand.Next(5);
                        } while (num2 == 0);                    ProEventArgs e = new ProEventArgs(num1, num2);
                        
                        Proevent(this, e);                }
                }
                public void Suspend()
                {
                    if (!blnSuspended)
                    {
                        blnSuspended = true;
                        mUnique.WaitOne();
                    }
                }
                public void Resume()
                {
                    if (blnSuspended)
                    {
                        blnSuspended = false;
                        mUnique.Close();
                    }
                }
            }
      

  2.   

    问题可能出在这里:
      while   (true) 
    -----------------
    你这个判断没用,无论如何他都执行mUnique.WaitOne(); mUnique.Close(); 你的线程当然死锁                                     
      

  3.   

    1.你应该用 EventWaitHandle
    2. ProEventArgs   e   =   new   ProEventArgs(num1,   num2); 
                                            
                                            Proevent(this,   e); 
    此处实应为Event.Set ();
    3. 主线程等待数据时使用WaitOne()
      

  4.   

    ProEventArgs       e       =       new       ProEventArgs(num1,       num2);   
                                                                                    
                                                                                    Proevent(this,       e);像你这种方法,接收数据的线程,也就是事件处理函数所在线程还是这个线程本身,,你知道吗?
      

  5.   

    啊~~..对O~~
    我试试去~~谢拉~~^O^~~
    对了..Event.Set   (); 怎么用啊`??没有用过O~
      

  6.   

    当Set的时候,被阻塞的线程就开始执行了。
      

  7.   

    可是..当主线程在处理数据的时候..辅线程.不是应该被挂起么`???
    也用waitone()`?
      

  8.   

    看你的需要。。你可以用另一个Event,让数据线程等待它,主线程读后,将这个Event. Set
      

  9.   

    event.set() 这个函数没有O~~