曾經使用過ThreadingTimer,但發現在短時間內大量呼叫同一個ThreadingTimer時會發生部分呼叫無法觸發的窘境,因此最後使用自製的ThreadingTimer來解決這個問題。
public void Regularly_SaveData(int Initial_Interval, int Regular_Interval)
{
Thread TA = new Thread(() =>
{
bool Regular_Flag = true;
SpinWait.SpinUntil(() => false, Initial_Interval);
while (Regular_Flag)
{
Regularly_SaveData_Event();
SpinWait.SpinUntil(() => false, Regular_Interval);
}
});
TA.Start();
}
關於使用SpinWait的原因,我是參考了余小章大神的文章後決定以之取代Thread.Sleep()
詳見https://dotblogs.com.tw/yc421206/archive/2013/04/25/102300.aspx
2019-04-19新增實例
以後會常用的關閉程式倒數計時器
1. 先宣告變數
private bool AbandonTilTok = false;
2. 設定方法
/// <summary>
/// 關閉程式的倒數計時器
/// </summary>
/// <param name="Initial_Interval"></param>
/// <param name="Regular_Interval"></param>
public void Close_Form_TikTok(int Initial_Interval, int Regular_Interval)
{
Thread TA = new Thread(() =>
{
int times = 10;
bool Regular_Flag = true;
SpinWait.SpinUntil(() => false, Initial_Interval);
while (Regular_Flag)
{
if (AbandonTikTok)
{
AbandonTikTok = false;
break;
}
times -= 1;
//Transfer_Int_Event?.Invoke(times);
if (times <= 0)
{
this.Close();
break;
}
SpinWait.SpinUntil(() => false, Regular_Interval);
}
});
TA.IsBackground = true;
TA.Start();
}
文章標籤
全站熱搜
