我有一個定時器運行18秒,我想知道是否有可能在定時器倒計時期間每1.5秒更新一次變量。定時器執行期間每秒更新一次變量
只需要2個定時器一個18秒另一個定時器1.5秒更容易。
是否有任何其他方法可以更容易或更好。
我有一個定時器運行18秒,我想知道是否有可能在定時器倒計時期間每1.5秒更新一次變量。定時器執行期間每秒更新一次變量
只需要2個定時器一個18秒另一個定時器1.5秒更容易。
是否有任何其他方法可以更容易或更好。
使用微軟的Reactive Framework(NuGet「System.Reactive」)。然後,你可以這樣做:
long x = 0L;
Observable
.Interval(TimeSpan.FromSeconds(1.5))
.Take(12) // 18 seconds
.Subscribe(n =>
{
//update variable
x = n;
},() =>
{
//Runs when timer ends.
});
這就避免了所有,你問的是糞定時器。簡而言之,如果你想使用定時器,那麼你只需要1.5秒的時間間隔 - 但是在12次後停止這個時間,讓你持續18秒。
謝謝,這真的有所幫助。 –
我希望使用計時器設置爲1.5秒,因爲這個程序應該可以在我大學校園裏的任何一臺計算機上工作,我認爲該程序應該工作而無需安裝其他組件。 –
如果你的第18條要求很緊,你可能會發現1.5秒計時器漂移,12次重複始終持續18秒多一點。時間不少於1.5秒,所以通常更長。結果是錯誤將累積12倍以上。再說一遍,如果你的容忍度很低或者重複次數依然很少,那就不重要了。 – rfreytag
public partial class Form1 : Form
{
Timer timer = new Timer();
private long Elapsed;
public Form1()
{
InitializeComponent();
// set interval to 1.5 seconds 1500 (milliseconds)
timer.Interval = 1500;
// set tick event withs will be runt every 1.5 seconds 1500 (milliseconds)
timer.Tick += OnTimerTick;
// start timer
timer.Start();
}
private void OnTimerTick(object sender, EventArgs e)
{
// add 1500 milliseconds to elapsed 1500 = 1.5 seconds
Elapsed += 1500;
// check if 18 seconds have elapsed
// after 12 times it will be true 18000/1500 = 12
if (Elapsed == 18000)
{
// stop the timer if it is
timer.Stop();
}
// update variable
}
}
我使用異步/等待爲 - 幫我帶PCL尚未事件計時器
private async void RunTimerAsync()
{
await Timer();
}
private async Task Timer()
{
while (IsTimerStarted)
{
//Your piece of code for each timespan
//ElapsedTime += TimeSpan.FromSeconds(1.5);
await Task.Delay(TimeSpan.FromSeconds(1.5));
}
}
Task.Delay在內部使用Timer。此外,您還需要延長您的答案以包括18秒鐘的時間 –
請告訴我們您的定時器功能。你正在使用什麼計時器?如果您使用的計時器有一種方法,您可以以毫秒爲單位獲得當前的倒計時時間,則可以使用模1500,如if(currentcountdownTimeInMs%1500 == 0)... –