SignalAndWait
这个方法是不是让第二个waithandler调用了 waitone 方法?

解决方案 »

  1.   

    很垃圾。知道这种“阻塞”的东西有害就行了,甚至不值得去分析他多么有害。这种都是直接删除掉,或者就算是没时间删除而放着它,也仅仅是以一些功能测试让其维系,一旦可以删除必定要删除。由于“为了设计模式而设计模式”,这种代码也许有点“恐怖”意义。.net有很多异步操作手段。在多线程编程中,你不要胡乱阻塞,而应该回调。
      

  2.   

    谢谢 sp1234 的提醒。
    我暂时只是学习阶段,还谈不上应用。
    我测试了一下,发现
    WaitHandle.SignalAndWait(_EvntWtHndlConsumed[index], _EvntWtHndlProduced);
    这个方法应该将第二个waithandle进行了waitone。
      

  3.   

       class EventWaitHandleSample
        {
            static EventWaitHandle ewh;
            static EventWaitHandle ewh2;
            static void Main()
            {
                ewh = new EventWaitHandle(false, EventResetMode.AutoReset);
                ewh2 = new EventWaitHandle(false, EventResetMode.AutoReset);            Thread t1 = new Thread(delegate()
                {
                    ewh.Set();
                    WaitHandle.WaitAny(new WaitHandle[] { ewh2 });
                    Console.WriteLine("t1");
                });            Thread t2 = new Thread(delegate()
                {
                    WaitHandle.SignalAndWait(ewh2, ewh);
                    Console.WriteLine("t2");
                });            Thread t3 = new Thread(delegate()
                {
                    ewh2.WaitOne();
                    Console.WriteLine("t3");
                });
                t3.Start();
                t2.Start();
                t1.Start();
                Thread.Sleep(1000);
                Console.WriteLine("m1");
                Console.ReadLine();
                Console.ReadLine();
            }    }
    上面的代码为什么不是输出 t3、t1、t2 呢?