如何控制一条线程监听一个串口?
我发现我写的这个监听,会开启很多条线程来读取串口数据..  port.DataReceived += comm_DataReceived;void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {Thread t = new Thread(() =>
            {...  读取串口数据
 });            t.Start(); 

解决方案 »

  1.   

    void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
    不要再这里面启动线程
      

  2.   

    SerialPort  帮你把所有的事情都做完了  每个SerialPort对应一个串口  监听DataReceived事件 在事件处理程序中处理数据  不需要你再搞多线程
      

  3.   

    comm_DataReceived本身已经开了一个线程来处理了。每一个串口都有一个comm_DataReceived事件。在comm_DataReceived里添加数据处理代码,但是如果是高频大数据的话,单独开一个线程来处理数据。comm_DataReceived里只接受数据。
      

  4.   

    comm_DataReceived里你没访问UI吧?我没试过50个以上串口。但是我觉得应该也没问题啊。
      

  5.   

    comm_DataReceived里你没访问UI吧?我没试过50个以上串口。但是我觉得应该也没问题啊。 this.Invoke(new WriteInvoke(Write),
                                            new object[] { "读取到的内容" });我用这样来传给UI
      

  6.   

    comm_DataReceived里你没访问UI吧?我没试过50个以上串口。但是我觉得应该也没问题啊。 this.Invoke(new WriteInvoke(Write),
                                            new object[] { "读取到的内容" });我用这样来传给UI
    你用Invoke当然可能会卡,它是同步的。
      

  7.   

    comm_DataReceived里你没访问UI吧?我没试过50个以上串口。但是我觉得应该也没问题啊。 this.Invoke(new WriteInvoke(Write),
                                            new object[] { "读取到的内容" });我用这样来传给UI
    你用Invoke当然可能会卡,它是同步的。那应该用什么?
      

  8.   

    comm_DataReceived里你没访问UI吧?我没试过50个以上串口。但是我觉得应该也没问题啊。 this.Invoke(new WriteInvoke(Write),
                                            new object[] { "读取到的内容" });我用这样来传给UI
    你用Invoke当然可能会卡,它是同步的。那应该用什么?
    BeginInvoke。
      

  9.   

    port.DataReceived += comm_DataReceived
    这个就是了