C#只有一个线程执行
发布时间:2020-12-15 06:42:46 所属栏目:百科 来源:网络整理
导读:我有一个多线程的应用程序.我希望只有一个线程执行我的函数,而其他线程在执行函数时传递它.我怎样才能做到这一点? 我的方法是这样的: public void setOutput(int value) { try { GPOs gpos = reader.Config.GPO; gpos[1].PortState = GPOs.GPO_PORT_STATE.
我有一个多线程的应用程序.我希望只有一个线程执行我的函数,而其他线程在执行函数时传递它.我怎样才能做到这一点?
我的方法是这样的: 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |