亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#中倒計時功能的優(yōu)化方法小結(jié)

 更新時間:2024年01月14日 09:31:44   作者:全棧小5  
這篇文章主要為大家詳細(xì)介紹了當(dāng)C#重復(fù)使用一段代碼倒計時時,如何使用普通類和靜態(tài)方法,實現(xiàn)簡單的代碼封裝性、可擴(kuò)展性、可維護(hù)性,感興趣的可以了解下

背景

閑暇時,會使用window form窗體來開發(fā)一些工具或者鍛煉和驗證一些知識點(diǎn),為了確保運(yùn)行起來的窗體不是卡住狀態(tài),
所以就會在窗體的指定位置,比如,左上角或者右下角的位置加一個label標(biāo)簽,用于顯示當(dāng)前時間,yyyy-MM-dd HH:mm:ss。
因為這個當(dāng)前時間是通過Task異步方法進(jìn)行每隔一秒賦值一次時間值來實現(xiàn)當(dāng)前動態(tài)時間效果。

優(yōu)化前

優(yōu)化前,是通過在每個窗體添加一段倒計時異步方法代碼,然后窗體界面添加一個label標(biāo)簽用于顯示當(dāng)前實時時間。

界面

代碼

/// <summary>
/// 倒計時
/// </summary>
private void CurrentTime()
{
    Task.Run(() =>
    {
        while (true)
        {
            lbTime.Text = $"當(dāng)前時間:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";

            Thread.Sleep(1000);
        }
    });
}

優(yōu)化后

為什么要優(yōu)化!假如不優(yōu)化,會有如下這種情況

1)如果只有2、3個窗體,那么多復(fù)制幾次沒多大影響

2)如果有100個窗體,每個窗體都復(fù)制一遍,就是重復(fù)了100次這樣的代碼,方法要是改動了,就要改100次

基于上面情況,可以封裝成公共方法,可設(shè)計成靜態(tài)公共方法。

界面

代碼

封裝方法

/// <summary>
/// 普通類靜態(tài)方法
/// 對于靜態(tài)方法,類可以是普通類,也可以是靜態(tài)類
/// </summary>
public class TimeLabel
{
    public static void Time(Form that, int x=0, int y=0)
    {
        Label label = new Label();
        label.Location = new Point() { X = x, Y = y };
        label.Width = 179;
        label.Height = 15;

        that.Controls.Add(label);

        Task.Run(() => {
                
            while(true)
            {
                label.Text = $"當(dāng)前時間:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";
                Thread.Sleep(1000);
            }
        });
    }
}

窗體1

private void Test1_Load(object sender, EventArgs e)
{
    TimeLabel.Time(this, 50, 50);
}

private void button1_Click(object sender, EventArgs e)
{
    Test2 test2 = new Test2();
    test2.Show();
}

窗體2

private void Test2_Load(object sender, EventArgs e)
{
    TimeLabel.Time(this, 50, 50);
}

常見情況

報錯提示

在窗體異步方法里操作主線程控件時,會提示錯誤,線程間操作無限:從不不是創(chuàng)建控件"lbTime"的線程訪問它。

解決方法

可在構(gòu)造函數(shù)里增加下面代碼

/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
public TestTemp()
{
    InitializeComponent();
    CheckForIllegalCrossThreadCalls = false;
}

屬性作用

CheckForIllegalCrossThreadCalls 可以拆分成 4 個詞:

1.Check:檢查

2.For:為了

3.Illegal:非法的

4.CrossThreadCalls:跨線程調(diào)用

整體意思是:為了檢查跨線程調(diào)用是否非法。

C# 中的 CheckForIllegalCrossThreadCalls 是一個屬性,用于檢查在多線程編程中是否存在潛在的跨線程調(diào)用問題。

它可以幫助開發(fā)人員在開發(fā)過程中更好地處理線程間的通信。

在 C# 中,UI 線程是用于處理用戶界面操作的主線程,而其他操作(如網(wǎng)絡(luò)請求、計算等)通常需要在后臺線程中執(zhí)行。

然而,直接在后臺線程中訪問 UI 控件是不安全的,可能會導(dǎo)致不可預(yù)測的結(jié)果和操作系統(tǒng)錯誤。

CheckForIllegalCrossThreadCalls 屬性的作用是在調(diào)試模式下,檢測程序是否存在不安全的跨線程調(diào)用。

當(dāng)該屬性設(shè)置為 true 時,在出現(xiàn)跨線程調(diào)用時,會引發(fā)一個異常,以提醒開發(fā)人員進(jìn)行相應(yīng)的處理。

當(dāng)屬性設(shè)置為 false 時,不會引發(fā)異常,但仍然可能導(dǎo)致不安全的操作。

這個屬性主要用于幫助開發(fā)人員及時發(fā)現(xiàn)并修復(fù)由于線程之間的錯誤調(diào)用而導(dǎo)致的問題。

它可以提高應(yīng)用程序的穩(wěn)定性和可靠性,避免潛在的線程安全問題。

要注意的是,這個屬性只在調(diào)試模式下起作用,在發(fā)布版本中不會進(jìn)行檢查。

總結(jié)

1.封裝性

把一個段重復(fù)使用的代碼,封裝成一個公共調(diào)用的方法,實現(xiàn)了編程的封裝特性。

封裝成公共方法后,代碼也比較簡潔。

2.可擴(kuò)展性

在公共方法里,又可以統(tǒng)一進(jìn)行方法擴(kuò)展和改造

3.可維護(hù)性

如果有100處地方都要修改,那么工作量就大了。如果只需要修改一個地方,對于維護(hù)成本就大大降低

以上就是C#中倒計時功能的優(yōu)化方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于C#倒計時的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#編程實現(xiàn)連接ACCESS數(shù)據(jù)庫實例詳解

    C#編程實現(xiàn)連接ACCESS數(shù)據(jù)庫實例詳解

    這篇文章主要介紹了C#編程實現(xiàn)連接ACCESS數(shù)據(jù)庫的方法,以實例形式較為詳細(xì)的分析了C#連接access數(shù)據(jù)庫的具體步驟與相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • WinForm 自動完成控件實例代碼簡析

    WinForm 自動完成控件實例代碼簡析

    在Web的應(yīng)用方面有js的插件實現(xiàn)自動完成(或叫智能提示)功能,但在WinForm窗體應(yīng)用方面就沒那么好了,接下來參考一下這個實例,看看有沒有以外收獲,感興趣的朋友可以了解下啊,希望本文對你有幫助啊
    2013-01-01
  • C#學(xué)習(xí)筆記整理_淺談Math類的方法

    C#學(xué)習(xí)筆記整理_淺談Math類的方法

    下面小編就為大家?guī)硪黄狢#學(xué)習(xí)筆記整理_淺談Math類的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • C#實現(xiàn)打印與打印預(yù)覽功能的思路及代碼

    C#實現(xiàn)打印與打印預(yù)覽功能的思路及代碼

    這篇文章主要介紹了C#實現(xiàn)打印與打印預(yù)覽功能的思路及代碼,有需要的朋友可以參考一下
    2013-12-12
  • 詳談C++引用&和指針在作為形參時的區(qū)別

    詳談C++引用&和指針在作為形參時的區(qū)別

    下面小編就為大家?guī)硪黄斦凜++引用&和指針在作為形參時的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • C#生成餅形圖及添加文字說明實例代碼

    C#生成餅形圖及添加文字說明實例代碼

    這篇文章主要介紹了C#生成餅形圖及添加文字說明的方法,非常實用的功能,需要的朋友可以參考下
    2014-07-07
  • C#實現(xiàn)對象的序列化和反序列化

    C#實現(xiàn)對象的序列化和反序列化

    這篇文章介紹了C#實現(xiàn)對象序列化和反序列化的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C# CheckedListBox控件的用法總結(jié)

    C# CheckedListBox控件的用法總結(jié)

    本篇文章主要介紹了C# CheckedListBox控件的用法總結(jié),想要學(xué)習(xí)CheckedListBox的同學(xué)可以了解一下。
    2016-12-12
  • C#文件管理類Directory實例分析

    C#文件管理類Directory實例分析

    這篇文章主要介紹了C#文件管理類Directory,非常實用,需要的朋友可以參考下
    2014-08-08
  • C#中的char與string詳解

    C#中的char與string詳解

    本文詳細(xì)講解了C#中的char與string,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01

最新評論