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

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 =

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

我有一个名为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的值(因为每次循环结束时它都会改变)乘以毫秒

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
的方法,我想-把它的名字改成其他的东西。非常感谢,这正是我想要的