none
C#没有像JAVA那么强大的Timer? RRS feed

  • 问题

  • 如果Timer时间间隔为100ms,然而代码执行不止100ms,这样貌似程序就会进入阻塞状态,不过JAVA的Timer貌似可以解决这个问题的,一种是尽量让后面的赶上先前浪费的时间,一种是直接像Thread的Sleep那样不管代码执行耗费的时间

    2013年10月24日 6:01

答案

  • 如果Timer时间间隔为100ms,然而代码执行不止100ms,这样貌似程序就会进入阻塞状态,不过JAVA的Timer貌似可以解决这个问题的,一种是尽量让后面的赶上先前浪费的时间,一种是直接像Thread的Sleep那样不管代码执行耗费的时间

    可以把间隔时间稍微延长一点,比如105ms等。

    或者您可以考虑使用精度更高的System.Thread.Timer和System.Timers.Timer(后者用于服务端),但是两者全部是基于线程的,因此需要使用SynchronizedContenxt或者this.Invoke等方法控制UI上的控件(如果需要的话)。


    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    • 已标记为答案 hambert 2013年10月24日 7:02
    2013年10月24日 6:25
    版主

全部回复

  • 这个可以用await关键字。
    2013年10月24日 6:07
  • 如果Timer时间间隔为100ms,然而代码执行不止100ms,这样貌似程序就会进入阻塞状态,不过JAVA的Timer貌似可以解决这个问题的,一种是尽量让后面的赶上先前浪费的时间,一种是直接像Thread的Sleep那样不管代码执行耗费的时间

    可以把间隔时间稍微延长一点,比如105ms等。

    或者您可以考虑使用精度更高的System.Thread.Timer和System.Timers.Timer(后者用于服务端),但是两者全部是基于线程的,因此需要使用SynchronizedContenxt或者this.Invoke等方法控制UI上的控件(如果需要的话)。


    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    • 已标记为答案 hambert 2013年10月24日 7:02
    2013年10月24日 6:25
    版主