使用计时器在控制台应用程序中调用 single/multiple 方法

Using a timer to call a single/multiple method in a console application

我创建了一个控制台应用程序,它需要 运行 在我的客户端应用程序的后台运行,并且必须在一段时间后调用一个方法。到目前为止,我已经尝试了以下方法,但收效甚微,但它似乎没有用。

此外,如果我想使用同一个定时器调用多个方法,那我该怎么办?

class Program
{
    static void Main(string[] args)
    {
        Console.ReadLine();
        const bool generate = true;
        NewBookingTimer(generate);
    }

    public static void NewBookingTimer(bool generate)
    {
        if (!generate) return;
        var newBookingTimer = new Timer();
        newBookingTimer.Elapsed += (sender, e) => NewBooking();
        var random = new Random();
        int randomNumber = random.Next(0, 500);
        newBookingTimer.Interval = randomNumber;
        newBookingTimer.Enabled = true;
    }

    public static void NewBooking()
    {
        var dbObject = new DbConnect();
        dbObject.OpenConnection();
        var bookingObject = new GenerateBooking();
        bookingObject.NewBooking();
    }
}

呵呵...试试这个:

static void Main(string[] args)
{
    const bool generate = true;
    NewBookingTimer(generate);
    Console.ReadLine();
}

你这样做的方式,它在等待你输入一行,然后关闭......很明显,它不会做任何事情。

将它们翻转过来,它会触发您的事件,并且 运行 直到您点击 Enter :)


关于多次调用,你想让它每次触发时都调用Method_AMethdod_B吗?如果你加注,你可以同时拥有它们。否则,请更好地解释你想要什么。


您的代码略有修改:

static void Main(string[] args)
{
    const bool generate = true;
    NewBookingTimer(generate);
    Console.ReadLine();
}

public static void NewBookingTimer(bool generate)
{
    if (!generate) return;
    var newBookingTimer = new Timer();
    newBookingTimer.Elapsed += (sender, e) => NewBooking();
    newBookingTimer.Elapsed += (sender, e) => OldBooking();
    var random = new Random();
    int randomNumber = random.Next(0, 500);
    Console.Out.WriteLine("Random = " + randomNumber);
    newBookingTimer.Interval = randomNumber;
    newBookingTimer.Enabled = true;
}

public static void NewBooking()
{
    Console.Out.WriteLine("this is NEW booking");
}

public static void OldBooking()
{
    Console.Out.WriteLine("this is OLD booking");
}

结果如下:

此代码在同一个计时器上执行这 2 个方法。唯一的技巧是多行 lambda 计时器处理程序。

class Program
{
    static void Main(string[] args)
    {
        Console.ReadLine();
        const bool generate = true;
        NewBookingTimer(generate);
        Console.WriteLine("Running...");
        Console.ReadLine();
    }

    public static void NewBookingTimer(bool generate)
    {
        if (!generate) return;
        var newBookingTimer = new Timer();
        newBookingTimer.Elapsed += (sender, e) =>
        {
            MethodA();
            MethodB();
        };
        var random = new Random();
        int randomNumber = random.Next(0, 500);
        newBookingTimer.Interval = randomNumber;
        newBookingTimer.Enabled = true;
    }

    public static void MethodA()
    {
        Console.WriteLine("in method A");
    }

    public static void MethodB()
    {
        Console.WriteLine("in method B");
    }
}