C#定時器使用

来源:https://www.cnblogs.com/yuzhihui/archive/2023/01/11/5464664.html
-Advertisement-
Play Games

在C#里關於定時器類就有3個 1.定義在System.Windows.Forms里 2.定義在System.Threading.Timer類里 3.定義在System.Timers.Timer類里 System.Windows.Forms.Timer是應用於WinForm中的,它是通過Windows ...


在C#里關於定時器類就有3個  
1.定義在System.Windows.Forms里  
2.定義在System.Threading.Timer類里  
3.定義在System.Timers.Timer類里

System.Windows.Forms.Timer是應用於WinForm中的,它是通過Windows消息機制實現的,類似於VB或Delphi中的Timer控制項,內部使用API  SetTimer實現的。它的主要缺點是計時不精確,而且必須有消息迴圈,Console Application(控制台應用程式)無法使用。  
System.Timers.Timer和System.Threading.Timer非常類似,它們是通過.NET  Thread  Pool實現的,輕量,計時精確,對應用程式、消息沒有特別的要求。System.Timers.Timer還可以應用於WinForm,完全取代上面的Timer控制項。它們的缺點是不支持直接的拖放,需要手工編碼。

例1:
使用System.Timers.Timer類

System.Timers.Timer t = new System.Timers.Timer(10000);//實例化Timer類,設置間隔時間為10000毫秒;
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到達時間的時候執行事件;
t.AutoReset = true;//設置是執行一次(false)還是一直執行(true);
t.Enabled = true;//是否執行System.Timers.Timer.Elapsed事件;
public void theout(object source, System.Timers.ElapsedEventArgs e)
{
     MessageBox.Show("OK!");
} 

例2:

System.Threading.Timer類的TimerCallback 委托
System.Threading.Timer 是一個使用回調方法的計時器,而且由線程池線程服務,簡單且對資源要求不高。
只要在使用 Timer,就必須保留對它的引用。對於任何托管對象,如果沒有對 Timer 的引用,計時器會被垃圾回收。即使 Timer 仍處在活動狀態,也會被回收。當不再需要計時器時,請使用 Dispose 方法釋放計時器持有的資源。
使用 TimerCallback 委托指定希望 Timer 執行的方法。計時器委托在構造計時器時指定,並且不能更改。此方法不在創建計時器的線程中執行,而是在系統提供的線程池線程中執行。
創建計時器時,可以指定在第一次執行方法之前等待的時間量(截止時間)以及此後的執行期間等待的時間量(時間周期)。可以使用 Change 方法更改這些值或禁用計時器。
Demo application:
應用場景:在windows form程式自動執行某項工作後,希望其windows form能夠自動關閉。

代碼設計:

(1)首先聲明Timer變數:private System.Threading.Timer timerClose;
(2)在上述自動執行代碼後面添加如下Timer實例化代碼:

// Create a timer thread and start it
timerClose = new System.Threading.Timer(new TimerCallback(timerCall), this, 5000, 0);  

Timer構造函數參數說明:
Callback:一個 TimerCallback 委托,表示要執行的方法。
State:一個包含回調方法要使用的信息的對象,或者為空引用(Visual Basic 中為 Nothing)。
dueTime:調用 callback 之前延遲的時間量(以毫秒為單位)。指定 Timeout.Infinite 以防止計時器開始計時。指定零 (0) 以立即啟動計時器。
Period:調用 callback 的時間間隔(以毫秒為單位)。指定 Timeout.Infinite 可以禁用定期終止。

(3)定義TimerCallback委托要執行的方法:

private void timerCall(object obj)
{
      timerClose.Dispose();
      this.Close();
}

當然,除了使用上述System.Threading.Timer類的TimerCallback 委托機制外,應該還有很多其他的辦法。另外,這裡只是demo了TimerCallback委托的簡單應用。

......

作者:yuzhihui
出處:http://www.cnblogs.com/yuzhihui/ 聲明:歡迎任何形式的轉載,但請務必註明出處!!!
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 今天小編帶大家一起整合一下easyExcel,之所以用這個,是因為easyExcel性能比較好,不會報OOM! 市面上常見的導入導出Excel分為三種: hutool easyExcel poi hutool和easyExcel都是對poi的封裝,使用起來更加方便! 如果想使用poi和hu ...
  • 一、前言”前後端分離“已經成為互聯網項目開發的業界標桿,通過Tomcat+Ngnix(也可以中間有個Node.js),有效地進行解耦。並且前後端分離會為以後的大型分散式架構、彈性計算架構、微服務架構、多端化服務(多種客戶端,例如:瀏覽器,車載終端,安卓,IOS等等)打下堅實的基礎。前後端分離(解耦) ...
  • 1、在任意目錄之間快速移動 你發現自己要在兩個或更多目錄之間頻繁移動,一會切換到這裡,一會切換到那裡,來回跳轉。這些目錄之間隔得還挺遠,反覆輸入冗長的路徑讓人疲憊不堪。 使用內建命令 pushd 和 popd 來管理目錄棧,輕鬆地在目錄之間切換。下麵是一個簡單的示例: $ cd /tmp/tank ...
  • 奉行長期主義的開發者都有一個共識:對於伺服器來說,數據備份非常重要,因為伺服器上的數據通常是無價的,如果丟失了這些數據,可能會導致嚴重的後果,伴隨雲時代的發展,備份技術也讓千行百業看到了其“雲基因”的成長與進化,即基於雲存儲的雲備份。 本次我們使用Golang1.18完成百度網盤(百度雲盤)介面AP ...
  • JavaWeb綜合案例 筆記目錄:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 視頻教程(P154~P163) 功能列表 環境搭建 執行提供的下麵的tb_brand.sql腳本 -- 刪除tb_brand表 drop table if ex ...
  • Redis作為一個非關係型資料庫,由於其超高的併發處理性能,及其對緩存場景所提供的系列能力構建,使其成為了集中緩存的絕佳選擇。本篇我們聊聊Redis數據管理的能力,如數據過期、數據淘汰、數據持久化等。 ...
  • 幾天沒寫了,今天寫一個簡單的小題 這道題乍一看,有點沒有頭緒,但是仔細考慮,也不是毫無頭緒. 思路1: 只要會十進位和二進位之間的轉換,將十進位轉二進位,然後存放到數組裡面,接著進行偶數位的操作,最後在轉十進位就好; 但是,有沒有更好的方法呢? 思路2: 電腦裡面數字的存儲本來就是二進位,為何要復 ...
  • Blazor WebAssembly初次訪問需要載入很多dll,體積較大,因此第一次載入比較慢。 針對此問題Microsoft提供了優化方案:壓縮 https://learn.microsoft.com/zh-cn/aspnet/core/blazor/host-and-deploy/webasse ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...