Timer应该是多线程的,每到一定的时间就触发事件,不会管上一次执行是否成功时间间隔大概为30秒
现在做法是建立一个线程,然后处理事件,
处理完后sleep 30 秒问题在于窗体会不再响应,看任务管理器
应用也会显示没有反应
感觉好像性能不高效,有什么好的方法没有?

解决方案 »

  1.   

    利用单线程完成,自然就要设计到线程的安全。你可以跟踪到代码,看看是否二次激发,还是干脆卡在了第一次的运行中;
    ==================================================================
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    优惠接单开发,收费带初学者,组件控件定制开发,成品源代码批发
    联系方式:Q64180940(请清楚注明业务还是技术咨询)  全天在线
    ==================================================================
      

  2.   

    看了一下,说几点想法:
    1. 不应该在UI线程Sleep 30s,这样会让你的UI无响应。
    2. 建议在UI线程外单起一个工作线程,方法可以用
       (1) BackgroundWorker类,.NET 提供的专门用于做后台工作的类
       (2) 直接new Thread(),效果一样,不过没有BackgroundWorker类那么好控制。
    3. 如果用Timer,建议用以下方式试试:
       (1) 写一个delegate,将你的操作写在其中
       (2) 起一个Timer,每30秒去触发这个delegate,需要注意的是这个delegate最好用异步形式(BeginInvoke)以上属于个人看法,仅供参考
      

  3.   

    neucf() 
    ---
    同意,调用的应该是一个委托,其他的不一定能执行
      

  4.   

    呵呵,今天刚好了一个跟这个差不多的东西,拿出来分享一下
       thread = New Threading.Thread(AddressOf 你的函数名字)此处省略........
          While True
               ...........................
                System.Threading.Thread.CurrentThread.Sleep(3000)
            End While此处省略........
    把你的代码写在这个死循环里面,它就每隔30秒执行一次你想要做的事情啦
      

  5.   

    哦,我忘记了,这个是用vb.net写的;不过c#和这个差不多;大同小异
      

  6.   

    现在用的是和hbcbsxw一样
    不过如果在UI的一个button事件中用thread = New Threading.Thread(AddressOf 你的函数名字)
    那么你的UI就会没有回应了
    所以我担心死循环会不会影响到CPU的性能
    不过毕竟我还让线程 Sleep 了 30 秒这个是不是最佳的
      

  7.   

    用BackgroundWorker  或者  线程池,你的UI就不会死了