C# 定时器回调在每个循环中使用函数的返回值

标签 c# timer callback

我想要实现一些我不知道是否可能的事情,但什么也没有......

我有一个名为 X 的静态 int 变量,以及一个递增 X 然后返回新值的函数。

 public static int X;

 public int ReturnInt()
    {
        X = X + 1
        return x;
    }

我有另一个函数,它是一个 TimerCallBack 函数,它将每 N 毫秒循环一次。

public static void TimerCallback(Object o)
    {
        y = ReturnInt();
        Console.WriteLine("Value:" + y);
        GC.Collect();
    }

然后在主函数中:-

public static void Main(string[] args)
    {


        Timer t = new Timer(TimerCallback, null, 0, X * 1000);
        Console.ReadLine();
    }

此应用程序仅适用于第一个循环,因为它只能在计时器的第一个循环上看到 X 的增量值,然后保持不变而不更新。

所以输出是:

Value:1

我想要做的是使用 Timer 函数的最后一个参数将 X 的值(因为每次循环结束时它都会改变)乘以毫秒。

这可能吗?

最佳答案

当您实例化计时器时,您实际上所做的是将 dueDateperiod 设置为 0(X 在开始时间为 0)。 dueDate 等于 0 表示计时器立即启动,period 等于 0 表示不再重复。这很奇怪,因为在文档中它说您应该指定 System.Threading.Timeout.Infine 来禁用周期性信号。

您可以尝试这样的方法来更改 TimerCallback 调用之间的时间间隔:

public static int X;
public static Timer timer;
public static int ReturnInt()
{
    X = X + 1;
    return X;
}

public static void TimerCallback(object o)
{
    var y = ReturnInt();
    Console.WriteLine("Value:" + y);
    timer.Change(y * 1000, 0);
    GC.Collect();
}

public static void Main(string[] args)
{
    timer = new Timer(TimerCallback, null, 0, 0);
    Console.ReadLine();
}

Main 中,您创建一个立即运行的计时器,并在 TimerCallback 方法中,使用 timer.Change(y * 1000, 0),因此每次值更改时都会在 y * 1000 毫秒调用该方法。

关于C# 定时器回调在每个循环中使用函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51875425/

相关文章:

c# - 正则表达式删除特殊字符

javascript - 如何在 JavaScript 中编写倒数计时器?

multithreading - 如何在后台更新 MATLAB GUI?

java - Java 定时器的问题

JavaScript 回调管理

wcf - Silverlight 应用程序能否从一个调用接收多个回调?

c# - 如何使用 AutoMapper 映射食谱与成分

c# - 在加载的程序集中按名称搜索类型的最快方法是什么?

c# - 控制递归方法深度——获取所有子文件夹

node.js - Socket.IO - 如何离线处理 Node.js