运行 随机间隔的函数 C#
Running a function at random intervals C#
我在构造函数中调用了以下函数:
public void IntervalSC()
{
Random rnd = new Random();
double interval = rnd.Next(2000, 6000);
var SCTimer = new System.Timers.Timer();
SCTimer.Elapsed += new ElapsedEventHandler(dashboardController.Screenshot);
SCTimer.Interval = interval;
SCTimer.Enabled = true;
}
我希望间隔运行 dashboardController.Screenshot
在2000到6000之间但是在运行dom号生成后,它不会改变并保持运行ning Screenshot
函数以固定间隔由 rnd
生成。我知道这是因为 IntervalSC()
是 运行 一次,所以间隔的 运行dom 数也只生成一次。因此,我正在寻找有关如何以 运行dom 间隔 运行ning dashboardController.Screenshot
进行这项工作的建议。谢谢。
您可以在 dashboardController.Screenshot
中编辑计时器,但我觉得添加另一个处理程序来执行此操作更简洁。例如:
private Random rnd = new Random();
void Main()
{
double interval = rnd.Next(2000, 6000);
var SCTimer = new System.Timers.Timer();
SCTimer.Elapsed += new ElapsedEventHandler(dashboardController.Screenshot);
SCTimer.Elapsed += new ElapsedEventHandler(ChangeTimerInterval);
SCTimer.Interval = interval;
SCTimer.Enabled = true;
}
public void ChangeTimerInterval(Object source, System.Timers.ElapsedEventArgs e)
{
var timer = source as System.Timers.Timer;
timer.Interval = rnd.Next(2000, 6000);
}
你也可以这样做。
- 它使用 异步和等待模式
- 捕获任何同步上下文
- 它将 运行 很好地处理异步工作负载和 UI
- 也是可以取消的
例子
private Random rnd = new Random();
public async Task Generate(Func<Task> callback, CancellationToken cancellation)
{
try
{
while (!cancellation.IsCancellationRequested)
{
try
{
await callback();
}
catch (Exception e)
{
// log your errors here
}
await Task.Delay(rnd.Next(2000, 6000), cancellation);
}
}
catch (OperationCanceledException) {}
}
用法
_ = Generate(someMethodAsync, YourCancellationToken);
我在构造函数中调用了以下函数:
public void IntervalSC()
{
Random rnd = new Random();
double interval = rnd.Next(2000, 6000);
var SCTimer = new System.Timers.Timer();
SCTimer.Elapsed += new ElapsedEventHandler(dashboardController.Screenshot);
SCTimer.Interval = interval;
SCTimer.Enabled = true;
}
我希望间隔运行 dashboardController.Screenshot
在2000到6000之间但是在运行dom号生成后,它不会改变并保持运行ning Screenshot
函数以固定间隔由 rnd
生成。我知道这是因为 IntervalSC()
是 运行 一次,所以间隔的 运行dom 数也只生成一次。因此,我正在寻找有关如何以 运行dom 间隔 运行ning dashboardController.Screenshot
进行这项工作的建议。谢谢。
您可以在 dashboardController.Screenshot
中编辑计时器,但我觉得添加另一个处理程序来执行此操作更简洁。例如:
private Random rnd = new Random();
void Main()
{
double interval = rnd.Next(2000, 6000);
var SCTimer = new System.Timers.Timer();
SCTimer.Elapsed += new ElapsedEventHandler(dashboardController.Screenshot);
SCTimer.Elapsed += new ElapsedEventHandler(ChangeTimerInterval);
SCTimer.Interval = interval;
SCTimer.Enabled = true;
}
public void ChangeTimerInterval(Object source, System.Timers.ElapsedEventArgs e)
{
var timer = source as System.Timers.Timer;
timer.Interval = rnd.Next(2000, 6000);
}
你也可以这样做。
- 它使用 异步和等待模式
- 捕获任何同步上下文
- 它将 运行 很好地处理异步工作负载和 UI
- 也是可以取消的
例子
private Random rnd = new Random();
public async Task Generate(Func<Task> callback, CancellationToken cancellation)
{
try
{
while (!cancellation.IsCancellationRequested)
{
try
{
await callback();
}
catch (Exception e)
{
// log your errors here
}
await Task.Delay(rnd.Next(2000, 6000), cancellation);
}
}
catch (OperationCanceledException) {}
}
用法
_ = Generate(someMethodAsync, YourCancellationToken);