使用c#做串口通信,发一个命名收一次数据的那种,现在定时发送接受数据,定时器之外的其它方法调用串口时,怎么实现等待定时器中的代码执行完再执行该方法

解决方案 »

  1.   

    担心冲突可以使用lock关键字。
    比如点击一个按钮触发一个方法,该方法需要使用定时器中的串口资源,当点击事件发生时恰好定时器中的代码正在运行,就会造成冲突卡死
      

  2.   

    并不仅仅是“担心冲突”,而是所谓的“使用定时器”的方式不对。当有消息来的时候就处理串口消息。当需要发送消息的时候就 send。在有数据冲突的时候才需要瞬间(极个别极小范围的代码块儿)用lock 同步。那么所谓“冲突”,其实更多地是来自于同步阻塞的编程思路,是自己忙着去卡死线程逻辑的。
      

  3.   

    任何操作,“一瞬间”也就是几毫秒、几十毫秒就完毕了,过程就结束了,线程就不用了。业务解析和处理工作可以使用异步 Worker 线程,而释放 I/O 线程让串口继续高速处理底层事件(因为你不释放I/O线程则串口的后续异步消息事件不会触发)。
      

  4.   

    Event和ManualResetEvent配合或单独使用。