最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

背景

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

優(yōu)化前

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

界面

代碼

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

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

優(yōu)化后

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

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

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

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

界面

代碼

封裝方法

/// <summary>
/// 普通類(lèi)靜態(tài)方法
/// 對(duì)于靜態(tài)方法,類(lèi)可以是普通類(lèi),也可以是靜態(tài)類(lè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)前時(shí)間:{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);
}

常見(jiàn)情況

報(bào)錯(cuò)提示

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

解決方法

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

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

屬性作用

CheckForIllegalCrossThreadCalls 可以拆分成 4 個(gè)詞:

1.Check:檢查

2.For:為了

3.Illegal:非法的

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

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

1.封裝性

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

封裝成公共方法后,代碼也比較簡(jiǎn)潔。

2.可擴(kuò)展性

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

3.可維護(hù)性

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

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

相關(guān)文章

  • WPF中下拉框可作選擇項(xiàng)也可以作為只讀文本框使用的方法

    WPF中下拉框可作選擇項(xiàng)也可以作為只讀文本框使用的方法

    這篇文章主要給大家介紹了關(guān)于WPF中下拉框可以選擇項(xiàng)也可以作為只讀文本框使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • C#檢測(cè)上傳文件真正類(lèi)型的方法

    C#檢測(cè)上傳文件真正類(lèi)型的方法

    這篇文章主要介紹了C#檢測(cè)上傳文件真正類(lèi)型的方法,可有效的防止用戶(hù)通過(guò)修改后綴名來(lái)改變文件類(lèi)型的功能,需要的朋友可以參考下
    2015-04-04
  • 一文 詳解C#正確使用異常的六大原則

    一文 詳解C#正確使用異常的六大原則

    編程的世界充滿(mǎn)了挑戰(zhàn)和樂(lè)趣,異常就是我們繞不過(guò)去的大石頭,有時(shí)候,我們需要主動(dòng)引發(fā)一些異常,有時(shí)候,又需要主動(dòng)捕捉一些異常,今天,我們就來(lái)聊聊六個(gè)關(guān)于異常使用的黃金法則,幫助你在這個(gè)充滿(mǎn)挑戰(zhàn)的領(lǐng)域中游刃有余,需要的朋友可以參考下
    2025-12-12
  • C# 判斷時(shí)間段是否相交的實(shí)現(xiàn)方法

    C# 判斷時(shí)間段是否相交的實(shí)現(xiàn)方法

    這篇文章主要介紹了C# 判斷時(shí)間段是否相交的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • C#通過(guò)NPOI操作Excel的實(shí)例代碼

    C#通過(guò)NPOI操作Excel的實(shí)例代碼

    C#操作Excel的方法有很多種,本文介紹了C#通過(guò)NPOI操作Excel,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • 淺談C#網(wǎng)絡(luò)編程詳解篇

    淺談C#網(wǎng)絡(luò)編程詳解篇

    在現(xiàn)今軟件開(kāi)發(fā)中,網(wǎng)絡(luò)編程是非常重要的一部分,本文簡(jiǎn)要介紹下網(wǎng)絡(luò)編程的概念和實(shí)踐,需要的朋友可以參考下
    2017-01-01
  • C# 6.0 的知識(shí)梳理

    C# 6.0 的知識(shí)梳理

    目前最新的版本是C# 7.0,VS的最新版本為Visual Studio 2017 RC,兩者都尚未進(jìn)入正式階段。C# 6.0雖說(shuō)出了一段時(shí)間,但是似乎有許多人對(duì)這一塊知識(shí)并不了解。本文將對(duì)C# 6.0的知識(shí)進(jìn)行梳理,下面跟著小編一起來(lái)看下吧
    2016-12-12
  • C#調(diào)用C++ DLL bool返回值始終為true的問(wèn)題

    C#調(diào)用C++ DLL bool返回值始終為true的問(wèn)題

    這篇文章主要介紹了C#調(diào)用C++ DLL bool返回值始終為true的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Unity ScrollView實(shí)現(xiàn)無(wú)限循環(huán)效果

    Unity ScrollView實(shí)現(xiàn)無(wú)限循環(huán)效果

    這篇文章主要為大家詳細(xì)介紹了Unity ScrollView實(shí)現(xiàn)無(wú)限循環(huán)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 詳解C# 代碼占用的空間

    詳解C# 代碼占用的空間

    這篇文章主要介紹了C# 代碼占用的空間的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02

最新評(píng)論

鄄城县| 海城市| 杭州市| 江北区| 黄龙县| 江西省| 陆河县| 沾益县| 夹江县| 个旧市| 汉源县| 彭阳县| 布尔津县| 鱼台县| 海口市| 固始县| 邳州市| 灵寿县| 简阳市| 阿拉善右旗| 城市| 阿拉善盟| 泰安市| 喀喇沁旗| 本溪市| 陆良县| 延吉市| 台安县| 新田县| 读书| 昌邑市| 苍山县| 昭觉县| 南皮县| 上林县| 昌黎县| 德兴市| 西乌| 邓州市| 达州市| 平南县|