C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – 多等待句柄大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码

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# – 多等待句柄所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: