我必须在指定时间内遍历代码。我使用DateTime
实现了它var time=DateTime.Now.AddMinutes((Convert.ToDouble(1)));
while(DateTime.Compare(DateTime.Now, time) <= 0)
{
console.write("some message..")
}
我如何用Timer.Timer或thread.timer实现同样的方法,这是最好的方法..
是否可以每秒写10次? 谁能建议。谢谢
答案 0 :(得分:1)
static void Main(string[] args)
{
System.Threading.Timer timer = null;
int counts = 0;
timer = new Timer((obj) =>
{
Console.WriteLine(counts);
if (++counts > 10)
timer.Dispose();
}, null, 100, 100);
for (;;) ;
}
将在100ms后每隔100ms调用dosomething()方法 在后台,直到timer.Dispose()被调用; 这个实现将永远不会终止,因为它写在这里;)
答案 1 :(得分:1)
如果您打算完成这项工作,则需要制作程序multithreaded,
请参阅System.Threading和System.Threading.Task
一旦你的代码在它自己的线程中执行,(使用线程,任务,定时器或这些命名空间中的任何其他变体)你就可以告诉它在一段时间内停止执行,这个通过调用Thread.Sleep或Task.Delay方法来完成。
e.g。
Task.Run(()=>
{
do
{
//do something
await Task.Delay(100);
}
while(! exitCondition)
});
然而你不应该指望这个准确的时间,因为你正在做的是告诉操作系统这个线程不需要执行那段时间,它不会表示操作系统会在耗尽时立即将其传递给处理器。取决于CPU的繁忙程度,在线程到达等待处理队列的顶部之前可能会有相当长的延迟。如果时间非常重要,那么我会设置较短的时间并在运行前检查时钟
答案 2 :(得分:1)
您始终可以使用StopWatch,这是准确且最适合您的方案的。
Action<long> action = (milliseconds) =>
{
Console.WriteLine("Running for {0}ms", milliseconds);
Stopwatch watch = new Stopwatch();
watch.Start();
while (watch.Elapsed.TotalMilliseconds <= milliseconds)
{
Console.WriteLine("ticks:{0}", DateTime.Now.Ticks);
Thread.Sleep(100);
}
Console.WriteLine("Done");
watch.Stop();
};
Task.Run(() => action(1000));