gpt4 book ai didi

C# Timer Callback 在每个循环中使用函数的返回值

转载 作者:行者123 更新时间:2023-11-30 22:59:59 35 4
gpt4 key购买 nike

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

我有一个名为 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();
}

此应用程序仅适用于第一个循环,因为它只能在 Timer 的第一个循环中看到 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# Timer Callback 在每个循环中使用函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51875425/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com