C# 在一段时间内执行一项功能,并将时间作为参数
我希望在几秒钟内执行一些操作,将经过的时间作为参数(具体来说,lerp是外部硬件设备的配置值)。实现这一目标的简单方法是什么?我对C#可以处理线程和计时器的所有方法都有点迷茫 到目前为止,这就是我所拥有的,但它似乎笨重,而且可能是错误的C# 在一段时间内执行一项功能,并将时间作为参数,c#,multithreading,timer,C#,Multithreading,Timer,我希望在几秒钟内执行一些操作,将经过的时间作为参数(具体来说,lerp是外部硬件设备的配置值)。实现这一目标的简单方法是什么?我对C#可以处理线程和计时器的所有方法都有点迷茫 到目前为止,这就是我所拥有的,但它似乎笨重,而且可能是错误的 System.Threading.Tasks.Task.Run(async () => { var timeToRun = 5000; // in milliseconds var timer = new System.Timers.Tim
System.Threading.Tasks.Task.Run(async () =>
{
var timeToRun = 5000; // in milliseconds
var timer = new System.Timers.Timer();
var startTime = DateTime.Now;
timer.Elapsed += (s, e) =>
{
var elapsedTime = e.SignalTime - startTime;
var normalizedTime = elapsedTime.TotalMilliseconds / timeToRun;
someValue = Lerp(from, to, normalizedTime);
};
timer.Start();
await System.Threading.Tasks.Task.Delay(timeToRun);
timer.Stop();
});
我会选择一种简单的异步方法:
async Task Loop(int timeInMs, int iterationTimeInMs)
{
for (int current = 0; current < timeInMs; current += iterationTimeInMs)
{
await Task.Delay(iterationTimeInMs);
var normalizedTime = current / (double)timeInMs;
someValue = Lerp(from, to, normalizedTime);
}
}
async Task Loop(int timeInMs, int iterationTimeInMs)
{
Task taskFromLastIteration = null;
for (int current = 0; current < timeInMs; current += iterationTimeInMs);
{
var delay = Task.Delay(iterationTimeInMs); // start delay now
if (taskFromLastIteration != null)
someValue = await taskFromLastIteration;
await delay;
var normalizedTime = current / (double)timeInMs;
taskFromLastIteration = Task.Run(() => Lerp(from, to, normalizedTime));
}
if (taskFromLastIteration != null)
someValue = await taskFromLastIteration;
}