激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C#計時器的三種實現方法

C#計時器的三種實現方法

2022-03-05 16:58zb774095236 C#

這篇文章主要介紹了C#計時器的三種實現方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

在.net中有三種計時器:

一、 system.windows.forms命名空間下的timer控件,和所在的form屬于同一個線程。timer控件只有綁定了tick事件和設置enabled屬性為true之后才會自動計時,stop()方法,start()方法啟動計時器重新計時;

mytimer.enabled = true;  //啟動計時器
mytimer.interval = 1000; //設置計時器時間間隔,單位為ms
mytimer.stop(); //停止計時
mytimer.start(); //重新計時

設計界面:

C#計時器的三種實現方法

代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public partial class timer : form
  {
    system.datetime timenow = new datetime();
    timespan timecount = new timespan();
    public timer()
    {
      initializecomponent();
    }
    private void btntimestart_click(object sender, eventargs e)
    {
      mytimer.start();
      timenow = datetime.now;
    }
    private void timer_load(object sender, eventargs e)
    {
      mytimer.interval = 1000;
    }
    private void btntimestop_click(object sender, eventargs e)
    {
      mytimer.stop();
    }
    private void mytimer_tick(object sender, eventargs e)
    {
      timecount = datetime.now - timenow;
      txttimeshow.text = string.format("{0:00}:{1:00}:{2:00}", timecount.hours, timecount.minutes, timecount.seconds);
    }
    private void txttimeshow_textchanged(object sender, eventargs e)
    {
    }
  }

代碼里使用了datetime.now獲取當前系統時間,timespan變量取得時間間隔

二、system.timers命名空間下的timer類,使用elapsed事件另開一個線程。定義一個system.timers.timer對象,然后綁定elapsed事件,通過start()方法來啟動計時,通過stop()方法或者enable=false停止計時;

mytimer.autoreset = true; //每次達到指定間隔時間后,就觸發system.timers.timer.elapsed事件

設計界面:

C#計時器的三種實現方法

代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public partial class timer2 : form
  {
    //定義timer類變量
    system.timers.timer mytimer;
    long timecount;
    //定義委托
    public delegate void setcontrolvalue(long value);
    public timer2()
    {
      initializecomponent();
    }
    private void label1_click(object sender, eventargs e)
    {
    }
    //開始計時
    private void btntimestart_click(object sender, eventargs e)
    {
      mytimer.start();
      timecount = 0;
    }
    //停止計時
    private void btntimestop_click(object sender, eventargs e)
    {
      mytimer.stop();
    }
    private void timer2_load(object sender, eventargs e)
    {
      //設置時間間隔ms
      int interval = 1000;
      mytimer = new system.timers.timer(interval);
      //設置重復計時
      mytimer.autoreset = true;
      //設置執行system.timers.timer.elapsed事件
      mytimer.elapsed += new system.timers.elapsedeventhandler(mytimer_tick);
    }
    private void mytimer_tick(object sender, system.timers.elapsedeventargs e)
    {
      this.invoke(new setcontrolvalue(showtime), timecount);
      timecount++;
    }
    private void showtime(long t)
    {
      timespan temp = new timespan(0,0,(int)t);
      txttimeshow.text = string.format("{0:00}:{1:00}:{2:00}", temp.hours, temp.minutes,temp.seconds);
    }
    private void txttimeshow_textchanged(object sender, eventargs e)
    {
    
  }

代碼中利用timespan將計數器的整數轉化為datetime日期。

和timer控件相比,system.timers.timer.elapsed事件相當于控件的tick事件,只不過需要自己添加事件。

三、system.threading.timer類。定義timer類時,通過構造函數進行初始化。

最常用的構造形式:

timer(timercallback callback, object state , uint duetime , uint period)

callback: 回調方法必須是timercallback委托形式的:void timercallback(object state)

state:要傳入的對象引用,可以為null

duetime:回調首次被調用之前的時間,如果被設置為timeout.infinite則會停止計時

period:兩次回調之間的時間間隔,如果被設置為timeout.infinite則回調只調用一次

代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public partial class timer2 : form
  {
    system.threading.timer mytimer;
    long timecount;
    delegate void setvalue();
    public timer2()
    {
      initializecomponent();
    }
    private void label1_click(object sender, eventargs e)
    {
    }
    private void timerup(object state)
    {     
      this.invoke(new setvalue(showtime));
      timecount++;
    }
    public void showtime()
    {     
      timespan t = new timespan(0,0, (int)timecount);
      txttimeshow.text = string.format("{0:00}:{1:00}:{2:00}",t.hours,t.minutes,t.seconds);
    }
    //開始計時
    private void btntimestart_click(object sender, eventargs e)
    {
      timecount = 0;
      mytimer.change(0, 1000);     
    }
    //停止計時
    private void btntimestop_click(object sender, eventargs e)
    {
      mytimer.change(timeout.infinite, 1000);
    }
    private void timer2_load(object sender, eventargs e)
    {
      mytimer = new system.threading.timer(new timercallback(timerup), null, timeout.infinite, 1000);
    }
    private void txttimeshow_textchanged(object sender, eventargs e)
    {
    }   
  }

在上面所述的三種計時器中,第一種計時器和所在的form處于同一個線程,因此執行的效率不高;而第二種和第三種計時器執行的方法都是新開一個線程,所以執行效率比第一種計時器要好,因此在選擇計時器時,建議使用第二種和第三種。

總結

以上所述是小編給大家介紹的c#計時器的三種實現方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://blog.csdn.net/zb774095236/article/details/83573113

延伸 · 閱讀

精彩推薦
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
主站蜘蛛池模板: 一区二区三区欧美在线 | 免费a级片视频 | 欧美一区二区三区中文字幕 | 九九热在线免费观看视频 | 国产美女视频黄a视频免费 日韩黄色在线播放 | 国产一区二区在线观看视频 | 一级毛片在线免费观看 | 欧美日韩亚洲精品一区二区三区 | 好吊色37pao在线观看 | 欧美成人黄色小视频 | 国产喷白浆10p| 日本欧美一区二区三区在线播 | 欧美一级视频网站 | 久久精品性视频 | 欧美日韩精品不卡一区二区三区 | 免费观看国产视频 | 欧美a∨一区二区三区久久黄 | 黄色片网站在线看 | 久久国产精品久久久久久 | 国产女同疯狂激烈互摸 | 国产午夜电影在线观看 | 欧美成人一区二区三区 | 国产大片中文字幕在线观看 | 久久久国产精品网站 | 一区二区三级视频 | 爱看久久 | 国产精品久久久在线观看 | 国产精品自拍av | 精品国产久 | 久久综合爱 | 国产一级做a爱片在线看免 日日草夜夜 | 中文字幕视频在线播放 | 亚洲国产精品久久久久久久久久久 | 成人三级在线播放 | 久久精品女人天堂av | 欧美亚洲综合在线 | 久久久久久片 | 日韩视频一区二区在线观看 | 蜜桃视频在线免费播放 | 日本久久网站 | 激情福利视频 |