C#调度代码以便以后运行?

时间:2013-08-26 12:23:34

标签: c# dispatch

如何调度代码以便以后运行?类似的东西:

ThreadPool.QueueUserWorkItem(callback, TimeSpan.FromSeconds(1)); // call callback() roughly one second from now

3 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

System.Threading.Timer _timeoutTimer;
//...
int timeout = (int)TimeSpan.FromSeconds(1).TotalMilliseconds;
_timeoutTimer = new System.Threading.Timer(OnTimerElapsed, 
    null, timeout, System.Threading.Timeout.Infinite);
//...
void OnTimerElapsed(object state) {
     // do something
    _timeoutTimer.Dispose();
}

答案 1 :(得分:0)

只需在回调函数中暂停一下。如果您使用的是Threadpool或Task,它可能需要比您在开始之前发送的实际时间跨度更长的时间;这是因为如果线程排队,线程将不会立即开始执行。

public static void MyCallback(object delay)
{
    Thread.Sleep(((TimeSpan)delay).TotalMilliseconds);
    ... code ...
}

您可以使用匿名方法并使用较低级别的线程构造进行上述内联。

new Thread(() => {
    Thread.Sleep(delayMilliseconds);
    callbackFunction();
}).Start();

答案 2 :(得分:0)

您可以使用Timer类。