C#计时器回调,用于在每个循环中使用函数返回的值
我想实现一些我不知道是否可能的事情,但什么都没有 我有一个名为X的静态int变量和一个递增X的函数,然后返回新值C#计时器回调,用于在每个循环中使用函数返回的值,c#,timer,callback,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 =
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的值(因为每次循环结束时它都会改变)乘以毫秒
public static void TimerCallback(Object o)
{
y = ReturnInt();
Console.WriteLine("Value:" + y);
GC.Collect();
}
这可能吗?在主体之外声明x,将其作为一个对象传递给回调
public Int x = 0;
public static void Main(string[] args)
{
Timer t = new Timer(TimerCallback, x, 0, x * 1000);
Console.ReadLine();
}
将其传递给增量方法
private int ReturnInt(int x)
{
x = x + 1
return x;
}
在回调函数中,从为委托传递的对象中获取它
private void TimerCallback(int x)
{
var y = ReturnInt(x);
Console.WriteLine("Value:" + y);
GC.Collect();
}
您需要设置一些条件何时停止此操作,因为
x
将很快变大。这只是设置为无限运行。当您实例化计时器时,您实际要做的是将dueDate
和period
设置为0(开始时间X为0)。dueDate
等于0表示计时器立即启动,时段
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毫秒时调用。@Sean T您能解释一下应该如何执行吗?我在下面添加了一个答案,应该足以让您了解way@MahmoudElbably嗯,出于某种原因,您已将x声明为私有。这不是我发布的内容这是c中范围和关键字的有用参考,我更改了它,但它说:无法从“方法组”转换为“TimerCallback”Timer t=new Timer(TimerCallback,x,0,x*1000)代码>这是因为已经有了一种叫做TimerCallback
的方法,我想-把它的名字改成其他的东西。非常感谢,这正是我想要的