我有一個關於Visual Studio 2010 C sharp中的延遲的問題。 我需要時間延遲在程序中發送位置到伺服。現在我正在使用System.Threading.Thread.Sleep(200))但我需要延遲,我可以interupt。延遲程序就像睡覺()
當我使用睡眠時,該程序在睡眠過程中不起作用。 (點擊按鈕,軌跡欄移動...),但我必須在延遲期間控制程序。
什麼是存在於VS像功能睡眠?
非常感謝您的回覆。
馬丁
我有一個關於Visual Studio 2010 C sharp中的延遲的問題。 我需要時間延遲在程序中發送位置到伺服。現在我正在使用System.Threading.Thread.Sleep(200))但我需要延遲,我可以interupt。延遲程序就像睡覺()
當我使用睡眠時,該程序在睡眠過程中不起作用。 (點擊按鈕,軌跡欄移動...),但我必須在延遲期間控制程序。
什麼是存在於VS像功能睡眠?
非常感謝您的回覆。
馬丁
您可以使用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
}
想想你可能會混合使用幾種語言哈哈。在C#中沒有'function'關鍵字 –
感謝您指出這一點,我正在使用Javascript#。 –
使用帶有消除令牌
這裏有一個簡單的例子異步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();
}
你可以工作的過程中異步任務,而不阻止您的應用程序..因爲你正在使用VS2010使用Task.Delay()(它唯一的塊當前任務)
public async Task SomeWork()
{
while (someCondition)
{
//do some work
await Task.Delay(100);//milliseconds
}
}
,你不會有權訪問C#5功能(異步/正在等待關鍵字),並且很可能僅限於.NET 4.0。不幸的是,該版本沒有Task.Delay方法。
如果是這種情況,最簡單的選擇可能使用System.Threading.Timer或System.Timers.Timer根據您的需要。兩者都會在延遲後在線程池線程上執行一個方法。您可以在打勾前停止他們兩人,並且他們都支持「無限」期間。
停止線程計時器不明顯,使用Timer.Change方法。
上面的鏈接有很好的使用示例。
當你說「VS中存在什麼......」時,你的確是這樣認爲的:「Visual Studio中只存在IDE而不是語言。」 –
是的,很抱歉,謝謝你的修理。 –