曾經使用過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();
        }
文章標籤
全站熱搜
創作者介紹
創作者 wings890109 的頭像
wings890109

幽嵐飋翼

wings890109 發表在 痞客邦 留言(0) 人氣(199)