Thread logtemp; 
        private void timer2_Tick(object sender, EventArgs e)
        {
            logtemp = new Thread(new ThreadStart(ReadLogTempFun));
            logtemp.IsBackground = true;
            logtemp.Start();
        }
        private void ReadLogTempFun()
       {
        //要执行的代码
       }
      我一步一步跟踪得到的结果,程序运行 ,执行定时器后,跑到ReadLogTempFun()执行,这个时候函数没执行完,仅仅是执行一小部分,又回到了定时器代码部分来执行,我把定时的时间改到很大,还是那样。如果不调试跟踪,从结果上来看是看把函数里面的代码区别执行完。这是怎么回事。希望知道的朋友说一下。谢谢了。

解决方案 »

  1.   

    不同的线程, 在定时器与ReadLogTempFun中分别打上断点,可以看是在不同的线程中运行
      

  2.   

    timer2间隔多少呢,很大是多少,是不是在又一个线程过来了?
      

  3.   

    你每次间隔不是logtemp = new Thread(new ThreadStart(ReadLogTempFun)); ?
      

  4.   

    楼主,这个情况我的理解是这样的:
    (1)Thread.Start()方法运行后,ReadLogTempFun方法就进入了另外一个线程,而定时器是主线程中运行的,所以没等ReadLogTempFun运行完,定时器又开始运行了。
    (2)不知道你的定时器是否用Timer的,Timer线程也是一个辅助线程,所以同样不在主线程中运行
    (3)如果,你想把Thread中的代码运行完之后的话,思路是,将定时器的代码改到主线程中,然后,用Thread.Join()方法让ReadLogTempFun的方法完成后,才进行。希望对你有帮助。
      

  5.   

    你把timer2的间隔设置成2分钟就可以看到你想要的结果了。
    你timer中的开启线程,代码已经执行完成了,所开启的线程跟timer没任何关系,这个时候你timer设置的时间到了,自然就进入到timer的代码里去了。
    调试你用了10秒,而timer设置的是3秒,明显超过了timer的时间。
    如果不调试跟踪,从结果上来看是看把函数里面的代码区别执行完。这是因为执行线程的时间很短,小于timer的间隔时间。如果线程里的代码很复杂,执行时间要很长,那就跟你现在调试一样的结果了。最好不要在timer或是线程中套线程。
      

  6.   

    因为你在logtemp = new Thread(new ThreadStart(ReadLogTempFun)); 是这样定义的。
    所以每执行到这里来的时候就会调用那个方法。
      

  7.   

    多线程好像是 可以同时处理很多事情  但是在CPU处理起来的时候还是得一条指令一条指令的执行 只不过是CPU在极小的一段时间内处理一下A 又以极小的一段时间片处理B 
    根据这个道理可以感觉到 多线程调试的时候经常会两个线程不停地跳  实际上 只不过是兵分多路 每一路都在执行自己的事情 
    建议在需要的时候打断点 主用 F5 一个线程一个线程的调试 不要混着来 尽量少用 F10和F11
      

  8.   

    调试的时间比较长!超过timer的长度了
      

  9.   

    我用的定时器是Time,根据你的1和2看法 ,那Time是在主线程运行还是不在主线程运行呢。
      

  10.   

    LZ,你既然用了定时器,为什么还要用线程!定时器:除了System.Windows.Forms.Timer是单线程外,System.Threading.Timer和 System.Timers.Timer都是多线程的。你在定时器里又用到线程,那么不管时间到与没到,只要CPU的时间片一到,就会无条件跑到新的线程中。这是你控制不了的。既然你只想由定时器控制执行,那么就不要用新的线程,把功能放到定时器处理函数中。
      

  11.   

    Timer里不要用线程,尝试使用System.Threading.Timer和 System.Timers.Timer吧。
      

  12.   

    这很简单啊,我恨奇怪为什么这么多人都没想到这点...
    timer里判断线程状态,如果还在跑就直接返回.
      

  13.   

    [code]
      顶一下
    [/code]