我想要实现一些我不知道是否可能的事情,但什么也没有......
我有一个名为 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 的值(因为每次循环结束时它都会改变)乘以毫秒。
这可能吗?
最佳答案
当您实例化计时器时,您实际上所做的是将 dueDate
和 period
设置为 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/