C#只有一个线程执行

bhd*_*rkn 6 c# multithreading

我有一个多线程的应用程序.我希望只有一个线程执行我的函数,而其他线程在执行函数时传递它.我怎样才能做到这一点?

我的方法是这样的:

    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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 11

您可以结合使用锁定对象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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 其他线程不会在锁定队列吗?这似乎不是OP所要求的 (3认同)