界面死锁,求解。解决思路
界面死锁,求解。。。
最近做一个项目,上位机用C#查8个下位机,用的串口通讯。
程序中开了三个线程,一个UI线程,一个串口接收serialport1_DataRecieve线程,和一个PLC查询线程。
串口接收线程和PLC线程中更改控件全部都用了Invoke委托了,为什么界面还会卡死呀?查了好久,代码看了好几遍,找不到原因。。。求大神帮忙指点指点。。。
------解决方案--------------------
Invoke会造成死锁 这个你要自己调试 没什么好方法(个人感觉)
------解决方案--------------------
界面操作使用Invoke就表示你的界面操作 就使用了Lock
好像就是你在多线程中使用了Lock一样
个人感觉你是不是在一个Invoke中调用了另一个Invoke了?
这个问题只能调试吧 看看在那个操作中死锁了 一点一点的找
------解决方案--------------------
application.doevent
------解决方案--------------------
Hi,
我建议你直接在这个项目里面加一个写 Log 日志的机制,在每一个可能怀疑或能与业务有关的地方,与操作有关的地方,都写一个 Log 到本地机器上,
这样,当你有任何问题发生的时候,第一时间,是先看你输出来的日志,这样就能解决你的问题,找到根本原因在哪了.
------解决方案--------------------
用 BeginInvoke 试试
------解决方案--------------------
那么你有没有了解一下“为什么要使用BeginInvoke”呢?
你的做法,将使得那种bug出现。可能只是你自己不关心而已。
------解决方案--------------------
线程同步互相通讯,工作时序设计不好,用什么多线程啊。
用包装好的异步方法完全都能解决。
最近做一个项目,上位机用C#查8个下位机,用的串口通讯。
程序中开了三个线程,一个UI线程,一个串口接收serialport1_DataRecieve线程,和一个PLC查询线程。
串口接收线程和PLC线程中更改控件全部都用了Invoke委托了,为什么界面还会卡死呀?查了好久,代码看了好几遍,找不到原因。。。求大神帮忙指点指点。。。
------解决方案--------------------
Invoke会造成死锁 这个你要自己调试 没什么好方法(个人感觉)
------解决方案--------------------
界面操作使用Invoke就表示你的界面操作 就使用了Lock
好像就是你在多线程中使用了Lock一样
个人感觉你是不是在一个Invoke中调用了另一个Invoke了?
这个问题只能调试吧 看看在那个操作中死锁了 一点一点的找
------解决方案--------------------
application.doevent
------解决方案--------------------
Hi,
我建议你直接在这个项目里面加一个写 Log 日志的机制,在每一个可能怀疑或能与业务有关的地方,与操作有关的地方,都写一个 Log 到本地机器上,
这样,当你有任何问题发生的时候,第一时间,是先看你输出来的日志,这样就能解决你的问题,找到根本原因在哪了.
------解决方案--------------------
用 BeginInvoke 试试
------解决方案--------------------
那么你有没有了解一下“为什么要使用BeginInvoke”呢?
你的做法,将使得那种bug出现。可能只是你自己不关心而已。
------解决方案--------------------
线程同步互相通讯,工作时序设计不好,用什么多线程啊。
用包装好的异步方法完全都能解决。