我想实现一些我不知道是否可以实现的目标,但是什么也没做...
i有一个称为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的值(每次循环结束时都会改变)乘以毫秒。
这甚至有可能吗?
答案 0 :(得分:2)
实例化计时器时,实际上是将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调用每次更改值时的毫秒数。
答案 1 :(得分:0)
如何在主体外部声明x,将其作为对象传递给回调函数。
+---+-----------------------------------------------------------+
| id| merged columns |
+---+-----------------------------------------------------------+
| 1| [{name: animal, value: bat}, {name: talk, value: done}] |
| 2| [{name: animal, value: mouse}, {name: talk, value: mone}] |
| 3| [{name: animal, value: horse}, {name: talk, value: gun}] |
| 4| [{name: animal, value: horse}, {name: talk, value: some}] |
+---+-----------------------------------------------------------+
将其传递给增量方法。
Array
并在回调中将其从传递给委托的对象中获取?
case class merged(name:String, value: String)
您需要设置何时停止该条件,因为public Int x = 0;
public static void Main(string[] args)
{
Timer t = new Timer(TimerCallback, x, 0, x * 1000);
Console.ReadLine();
}
会变得非常大。这只是设置为运行indefinitley。