2012-12-23 52 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)'有一些無效參數

我真的沒有知道如何使這項工作正常,但如果任何人有一個鏈接或一些可以解釋初學者的計時器,我會很感激。

謝謝。

+1

http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=VS.100%29 .aspx不知道他會理解lambda的,但Jon的答案是現貨.. http://msdn.microsoft.com/en-us/library /system.threading.timercallback.aspx http://stackoverflow.com/ questions/1416803/system-timers-timer-vs-system-threading-timer – MethodMan

回答

12

的問題是,你的test()方法的簽名:

public static void test() 

不匹配TimerCallback所需的簽名:

public delegate void TimerCallback(
    Object state 
) 

這意味着你不能直接創建TimerCallback方法test。做最簡單的事情是改變你的test方法的簽名:

public static void test(Object state) 

或者你可以在你的構造函數調用使用lambda表達式:

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

注意遵循.NET命名約定,你的方法名應該以大寫字母開頭,例如Test而不是test

+0

工作正常。謝謝。 但是你能否給我提供一些討論代表的鏈接,所以我可以理解這是什麼意思? –

3

TimerCallback代表(您使用的Timer構造函數的第一個參數)需要一個類型爲object的參數(狀態)。

所有你需要做它的參數添加到test方法

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

而且這個問題將得到解決。

1

編寫測試方法如下解決異常:

public static void test(object state) 
     { 
      Console.WriteLine("test"); 
     } 
相關問題