我有一个关于Visual Studio 2010 C sharp延迟的问题。 我需要在程序中延迟发送位置到伺服。现在我正在使用 System.Threading.Thread.Sleep(200)),但我需要延迟,我可以中断。
当我使用睡眠时,睡眠期间该程序无法正常工作。 (点击按钮,轨迹栏移动......),但我必须在延迟期间控制程序。
VS中存在什么样的函数睡眠?
非常感谢您的回复。
马丁
答案 0 :(得分:1)
您可以使用Task.Delay
:
https://msdn.microsoft.com/en-us/library/hh194845(v=vs.110).aspx
public void mainFunction() {
//do stuff here
var delayTime = 1.5;
CancellationTokenSource source = new CancellationTokenSource();
var t = Task.Run(async delegate
{
await Task.Delay(TimeSpan.FromSeconds(delayTime), source.Token);
delayableFunction();
});
//can cancel here if necessary
source.Cancel();
//just continue on with other stuff...
}
public void delayableFunction() {
//do delay-able stuff here
}
答案 1 :(得分:1)
使用带有取消令牌的异步Task.Delay()
功能
这是一个简单的例子:
bool sendPos = true;
public async Task SomeFunction(CancellationToken token)
{
while (sendPos)
{
SendServoPos();
await Task.Delay(1000, token)
}
}
public void MainFunction()
{
var tokenSource = new CancellationTokenSource();
// Fire and Forget - Note it will silently throw exceptions
SomeFunction(tokenSource.Token)
// Cancel Loop
sendPos = false;
tokenSource.Cancel();
}
答案 2 :(得分:0)
由于您使用的是VS2010,因此无法访问C#5 功能( async / 等待关键字),并且很可能是仅限于.NET 4.0。不幸的是,该版本没有Task.Delay方法。
如果是这种情况,最简单的选择可能是System.Threading.Timer或System.Timers.Timer,具体取决于您的需求。两者都会在延迟后在线程池线程上执行一个方法。您可以在勾选之前停止它们,并且它们都支持“无限”时段。
停止线程计时器并不明显,请使用Timer.Change方法。
上面的链接有很好的用法示例。