2012-12-23 11 views
5

私はC#の初心者です。ある時間間隔で特定のメソッドを呼び出さなければならないコンソールアプリケーションを作成する。System.Threading.Timer.Timer()に最適なオーバーロードされたメソッドが無効な引数を持っています

私はこれを検索して、System.Threading.Timerクラスがこのような機能を実現できることを発見しましたが、実装方法はそれほどよくありません。

私はこの試みた:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Threading; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Timer x = new Timer(test, null, 0, 1000); 
      Console.ReadLine(); 
     } 

     public static void test() 
     { 
      Console.WriteLine("test"); 
     } 
    } 
} 

をしかし、私は言うTimer x = new Timer(test, null, 0, 1000);行でエラーが出ます:

System.Threading.Timer.Timer(System.Threadingための最良のオーバーロードされたメソッドの試合.TimerCallback、object、 int、int) '無効な引数があります

私は本当にしませんどのようにこの作業を適切に行うかを知っているが、誰かが初心者のためにタイマーを説明できるリンクや何かを持っていれば、私は感謝するだろう。

ありがとうございました。

public static void test() 

TimerCallbackに必要な署名と一致しません:

public delegate void TimerCallback(
    Object state 
) 

あなたから直接TimerCallbackを作成することはできませんことを意味し

+1

http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=VS.100%29 .aspxラムダを理解するかどうか分からないが、Jonの答えは上にある.. http://msdn.microsoft.com/en-us/library /system.threading.timercallback.aspx http://stackoverflow.com/質問/ 1416803/system-timer-timer-vs-system-threading-timer – MethodMan

答えて

12

問題は、あなたのtest()メソッドのシグネチャはということですtestメソッド。最も簡単な方法は、あなたのtestメソッドのシグネチャに変更することです:

public static void test(Object state) 

をそれとも、あなたのコンストラクタ呼び出しにラムダ式を使用できます.NETの命名規則に従うこと

Timer x = new Timer(state => test(), null, 0, 1000); 

注意を、メソッド名は大文字で始める必要があります。 testではなくTestです。

+0

これはうまくいきました。ありがとう。 しかし、デリゲートについて話すリンクを私に提供することができます。だから私はそれについて何かを理解することができますか? –

3

TimerCallback代理人(使用するTimerコンストラクタの最初の引数)は、タイプobjectの1つの引数(状態)をとります。

あなたがそれをしなければならないすべてはtest方法

public static void test(object state) 
{ 
    Console.WriteLine("test"); 
} 

にパラメータを追加し、問題が解決されます。例外を解決するために、次のように

1

は、テストメソッドを記述します。

public static void test(object state) 
     { 
      Console.WriteLine("test"); 
     } 
関連する問題