6

我正在制作一个必须以定时间隔调用某个方法的控制台应用程序。

我已经搜索过了,发现这个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)' 的最佳重载方法匹配有一些无效参数

我真的不知道如何使它正常工作,但是如果有人有链接或可以为初学者解释计时器的东西,我将不胜感激。

4

3 回答 3

16

问题是您的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.

于 2012-12-23T14:48:43.490 回答
4

TimerCallback委托(Timer您使用的构造函数的第一个参数)接受一个类型的参数(状态)object

只需将参数添加到test方法中

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

问题将得到解决。

于 2012-12-23T14:55:51.553 回答
1

编写测试方法如下解决异常:

public static void test(object state)
        {
            Console.WriteLine("test");
        }
于 2012-12-23T19:14:45.163 回答