private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (this.serialPort1.ReadBufferSize>0)
            {
                int count = this.serialPort1.Read(ReceBuf, 0, RecComMax);
                ReceBufAddPos = count;
                if (count != 0)
                {
                    timer1.Interval = 50;
                    timer1.Enabled = true;
                    timer1.Start();
                }
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {            ReceiveDatafun();
        }我是想做一个在串口接收中开启定时器的,,但是进不了timer1_Tick,,网上查了一下,说要写委托函数的,搞来搞去都不对,,求教定时器串口C#

解决方案 »

  1.   

    因为一帧长数据一次接收事件根本收不完,会多次进入接收事件,,,我是想,每次进入接收事件就启动一次定时器,当定时器时间到了,就表示没有后续帧了,,,进入定时器事件,开始处理接收数据帧,,,但是现在的问题,进入不了timer1_Tick
      

  2.   

    目测运行到count!=0下面的代码段会抛异常,Timer不是在串口的监听线程创建的话,访问要用Invoke
      

  3.   

    大侠,详细指导一下,这个Invoke具体怎么写的,,我搞来搞去还是进入不了timer1_Tick
      

  4.   

    感谢你的帮助,但是那个timer1_Tick进不去是什么问题呢,help me!
      

  5.   

    可能是你时钟启动的太频繁了,也可能是跨线程操作,但是你这个事件也是UI线程里面,应该不会才对。你在启动时间控件前加Control.CheckForIllegalCrossThreadCalls = false;试一下
      

  6.   

    serialPort1_DataReceived只触发了两次,时钟启动应该不频繁,  按你说的加了,没有效果,进不了timer1_Tick,
    Control.CheckForIllegalCrossThreadCalls = false;   //这个是做什么的?
    timer1.Interval = 50;
    timer1.Enabled = true;
    timer1.Start();
      

  7.   

    timer1.Enabled = true;和timer1.Start(); 一个意思,只要用一个就行了。Control.CheckForIllegalCrossThreadCalls = false;跨线程操作的时候忽略线程安全,保证执行说明不是跨线程的问题,代码逻辑有问题
      

  8.   

    我借用了Invoke的用法,实现了,谢谢你http://blog.sina.com.cn/s/blog_5a6f39cf0100s23x.html