请教下下面的代码的运行方式,看到我头痛。 SignalAndWait这个方法是不是让第二个waithandler调用了 waitone 方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很垃圾。知道这种“阻塞”的东西有害就行了,甚至不值得去分析他多么有害。这种都是直接删除掉,或者就算是没时间删除而放着它,也仅仅是以一些功能测试让其维系,一旦可以删除必定要删除。由于“为了设计模式而设计模式”,这种代码也许有点“恐怖”意义。.net有很多异步操作手段。在多线程编程中,你不要胡乱阻塞,而应该回调。 谢谢 sp1234 的提醒。我暂时只是学习阶段,还谈不上应用。我测试了一下,发现WaitHandle.SignalAndWait(_EvntWtHndlConsumed[index], _EvntWtHndlProduced);这个方法应该将第二个waithandle进行了waitone。 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 呢? 询问下个数据库同步的办法~~~~~~~~~我标题很长~~~~~~` c#打印求助 winform中datagridview怎么用comobox控件进去啊 在邮件标头中找到无效的字符 所有窗体都不支持windows主题 图表数据更新问题 已知一个窗口的句柄,如何修改该窗口内的资源 windows 下用C#来连接过Unix下DB2啊?如何做啊 Convert.FromBase64String的问题 问一个使用c#查询access数据库的问题 C#windows控件CheckListBox选项如何水平排布 如何在winform中实现桌面图标的效果
我暂时只是学习阶段,还谈不上应用。
我测试了一下,发现
WaitHandle.SignalAndWait(_EvntWtHndlConsumed[index], _EvntWtHndlProduced);
这个方法应该将第二个waithandle进行了waitone。
{
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 呢?