2017-12-22 14 views
0

タイマーでC#メソッドを実行する方法を教えてください。私はオンラインこの例が見つかりましたが、以下のDoStuffOnTimer()メソッドが打たれていません。タイマーでC#メソッドを実行するには?

public void DoStuff() 
    { 
     var intervalMs = 5000; 
     var timer = new Timer(intervalMs); 
     timer.Elapsed += new ElapsedEventHandler(DoStuffOnTimer); 
     timer.Enabled = true; 
    } 

    private void DoStuffOnTimer(object source, ElapsedEventArgs e) 
    { 
     //do stuff 
    } 
+1

タイマーで 'Start'を呼び出す必要があります。 [これを見る](https://msdn.microsoft.com/en-us/library/system.windows.forms.timer.start(v = vs.110).aspx) – burnttoast11

+0

'Start'は' Enabled'を本当の@bu –

+0

whictタイマーを使用していますか? –

答えて

0
using System; 
using System.Timers; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      Program thisone = new Program(); 
      thisone.DoStuff(); 
      Console.Read(); 
     } 

     public void DoStuff() 
     { 
      var intervalMs = 5000; 
      Timer timer = new Timer(intervalMs); 
      timer.Elapsed += new ElapsedEventHandler(DoStuffOnTimer); 
      timer.Enabled = true; 
     } 

     private void DoStuffOnTimer(object source, ElapsedEventArgs e) 
     { 
      //do stuff 
      Console.WriteLine("Tick!"); 
     } 
    } 
} 
+0

Tick()はSystem.Timers.Timerで利用できません – user8570495

+0

static varとclassメソッドを試してください新しいイベントハンドラの代わりに、これを参照してください:https://msdn.microsoft.com/library/system.timers.timer.elapsed(v=vs.110).aspx – GeorgeS

+0

ありがとうございます。あなたが提供したURLのコードを新しいコンソールアプリケーションにコピーしています。だから私はデバッグする必要がある私のプログラムで奇妙な何かがあるはずです – user8570495

1

をそれとも、非常に正確なタイマーを必要としない場合は、常にそれを自分で作成することができます。

using System; 
using System.Threading; 
using System.Threading.Tasks; 

namespace Temp 
{ 
    internal class Program 
    { 
     // this is the `Timer` 
     private static async Task CallWithInterval(Action action, TimeSpan interval, CancellationToken token) 
     { 
      while (true) 
      { 
       await Task.Delay(interval, token); 
       if (token.IsCancellationRequested) 
       { 
        return; 
       } 

       action(); 
      } 
     } 

     // your method which is called with some interval 
     private static void DoSomething() 
     { 
      Console.WriteLine("ding!"); 
     } 

     // usage sample 
     private static void Main() 
     { 
      // we need it to add the ability to stop timer on demand at any time 
      var cts = new CancellationTokenSource(); 

      // start Timer 
      var task = CallWithInterval(DoSomething, TimeSpan.FromSeconds(1), cts.Token); 

      // continue doing another things - I stubbed it with Sleep 
      Thread.Sleep(5000); 

      // if you need to stop timer, let's try it! 
      cts.Cancel(); 

      // check out, it really stopped! 
      Thread.Sleep(2000); 
     } 
    } 
} 
関連する問題