public voID MethodA(){ MyManualresetEvent.reset();}public voID MethodB(){ MyManualresetEvent.Set();}
当使用MyManualresetEvent.WaitOne()来停止线程时,如果另一个线程调用了MethodA而不是MethodB,则此方法有效.
我现在要做的是能够两次调用MethodA,另一个线程只在MethodB被调用两次时才继续,而不是只调用一次.
我希望System.Threading命名空间中有一些我不知道的东西.
解决方法 假设您不需要停止同时执行的BlockedMethod即可调用MethodA,这可能最容易通过标准的 Monitor类来解决. MethodA和MethodB共享一个计数器,该计数器记录在没有对MethodB的相应调用的情况下调用MethodA的次数. BlockedMethod方法仅在该计数为0时才进行;如果没有,它等待MethodB发出信号表明是时候继续了.object mylock = new object();int count = 0;public voID MethodA(){ // record that MethodA is executing lock (mylock) count++; // other code...}public voID MethodB(){ // other code... lock (mylock) { // MethodB has Now finished running count--; // wake up other thread because it may Now be allowed to run Monitor.pulse(mylock); }}public voID BlockedMethod(){ // wait until the number of calls to A and B is equal (i.e.,count is 0) lock (mylock) { while (count != 0) Monitor.Wait(mylock); } // calls to A and B are balanced,proceed...}总结
以上是内存溢出为你收集整理的c# – 多等待句柄全部内容,希望文章能够帮你解决c# – 多等待句柄所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)