C#只有一个线程执行

C#只有一个线程执行,第1张

概述我有一个多线程的应用程序.我希望只有一个线程执行我的函数,而其他线程在执行函数时传递它.我怎样才能做到这一点? 我的方法是这样的: public void setOutput(int value) { try { GPOs gpos = reader.Config.GPO; gpos[1].PortState 我有一个多线程的应用程序.我希望只有一个线程执行我的函数,而其他线程在执行函数时传递它.我怎样才能做到这一点?

我的方法是这样的:

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#只有一个线程执行全部内容,希望文章能够帮你解决C#只有一个线程执行所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1259409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存