C#只有一个线程执行

前端之家收集整理的这篇文章主要介绍了C#只有一个线程执行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个多线程的应用程序.我希望只有一个线程执行我的函数,而其他线程在执行函数时传递它.我怎样才能做到这一点?

我的方法是这样的:

public void setOutput(int value)
    {
        try
        {
            GPOs gpos = reader.Config.GPO;
            gpos[1].PortState = GPOs.GPO_PORT_STATE.TRUE;
            gpos[2].PortState = GPOs.GPO_PORT_STATE.TRUE;
            Thread.Sleep(WAIT);
            gpos[1].PortState = GPOs.GPO_PORT_STATE.FALSE;
            gpos[2].PortState = GPOs.GPO_PORT_STATE.FALSE;
        }
        catch (Exception ex)
        {
            logger.Error("An Exception occure while setting GPO to " + value + " " + ex.Message);
        }
    }

解决方法

您可以将锁定对象与 Monitor.TryEnter结合使用.
private Object outputLock = new Object();

public void setOutput(int value)
{
    if Monitor.TryEnter(outputLock)
    {
        try
        {
            .... your code in here
        }
        finally
        {
            Monitor.Exit(outputLock);
        }
    }
}

每次只允许一个线程进入Monitor.TryEnter块.如果一个线程到达此处,而另一个线程在里面,则Monitor.TryEnter返回false.

猜你在找的C#相关文章