日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#執(zhí)行耗時(shí)進(jìn)程時(shí)顯示動(dòng)態(tài)等待效果實(shí)現(xiàn)

admin
2024年11月27日 18:47 本文熱度 213

在C#中,當(dāng)執(zhí)行耗時(shí)操作時(shí),顯示一個(gè)動(dòng)態(tài)等待效果(如一個(gè)旋轉(zhuǎn)的圖標(biāo)或進(jìn)度條)可以提升用戶體驗(yàn)。以下是一個(gè)簡(jiǎn)單的實(shí)現(xiàn)示例,使用 TaskCancellationToken, 和 ProgressBar 控件(或者你可以自定義任何動(dòng)態(tài)效果控件)。

示例步驟:

  1. ?創(chuàng)建Windows Forms應(yīng)用程序?

    • 使用Visual Studio創(chuàng)建一個(gè)新的Windows Forms應(yīng)用程序。
  2. ?添加控件?

    • 在主窗體上添加一個(gè) ProgressBar 控件(可以選擇添加一個(gè) Label 控件來(lái)顯示文本信息)。
    • 你也可以自定義一個(gè)動(dòng)態(tài)效果的控件,比如一個(gè)旋轉(zhuǎn)的圖標(biāo)。
  3. ?編寫(xiě)代碼?

    • 使用異步編程來(lái)執(zhí)行耗時(shí)操作,并在UI線程中更新動(dòng)態(tài)等待效果。

示例代碼:

以下是一個(gè)完整的示例代碼,演示了如何實(shí)現(xiàn)動(dòng)態(tài)等待效果。

using System;

using System.Threading;

using System.Threading.Tasks;

using System.Windows.Forms;


namespace DynamicWaitingExample

{

    public partial class MainForm : Form

    {

        public MainForm()

        {

            InitializeComponent();

        }


        private async void btnStartTask_Click(object sender, EventArgs e)

        {

            // 初始化 ProgressBar

            progressBar1.Style = ProgressBarStyle.Marquee;

            progressBar1.MarqueeAnimationSpeed = 30; // 調(diào)整以更改動(dòng)畫(huà)速度


            // 禁用按鈕以防止重復(fù)點(diǎn)擊

            btnStartTask.Enabled = false;


            // 執(zhí)行耗時(shí)任務(wù)并等待完成

            await RunLongRunningTaskAsync();


            // 還原UI狀態(tài)

            progressBar1.Style = ProgressBarStyle.Blocks;

            progressBar1.MarqueeAnimationSpeed = 0;

            btnStartTask.Enabled = true;


            MessageBox.Show("任務(wù)完成!");

        }


        private async Task RunLongRunningTaskAsync()

        {

            // 使用 CancellationTokenSource 以便可以取消任務(wù)(可選)

            var cts = new CancellationTokenSource();


            try

            {

                // 模擬耗時(shí)任務(wù)

                await Task.Run(() =>

                {

                    for (int i = 0; i < 100; i++)

                    {

                        // 模擬工作的一部分

                        Thread.Sleep(50); // 模擬耗時(shí)操作


                        // 報(bào)告進(jìn)度(可選,用于更新UI進(jìn)度條)

                        // 這里進(jìn)度條僅僅是示意,因?yàn)槭褂玫氖荕arquee風(fēng)格

                        this.Invoke(new Action(() =>

                        {

                            // 可以根據(jù)需要更新其他UI控件

                            // progressBar1.Value = i; // 僅對(duì)Blocks風(fēng)格有效

                        }));


                        // 檢查是否請(qǐng)求取消

                        if (cts.Token.IsCancellationRequested)

                        {

                            cts.Token.ThrowIfCancellationRequested();

                        }

                    }

                }, cts.Token);

            }

            catch (OperationCanceledException)

            {

                // 任務(wù)取消處理(可選)

                MessageBox.Show("任務(wù)已取消。");

            }

            finally

            {

                // 清理資源

                cts.Dispose();

            }

        }


        // 初始化窗體控件

        private void InitializeComponent()

        {

            this.progressBar1 = new System.Windows.Forms.ProgressBar();

            this.btnStartTask = new System.Windows.Forms.Button();

            this.SuspendLayout();

            // 

            // progressBar1

            // 

            this.progressBar1.Location = new System.Drawing.Point(12, 12);

            this.progressBar1.Name = "progressBar1";

            this.progressBar1.Size = new System.Drawing.Size(358, 23);

            this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee;

            this.progressBar1.TabIndex = 0;

            // 

            // btnStartTask

            // 

            this.btnStartTask.Location = new System.Drawing.Point(158, 50);

            this.btnStartTask.Name = "btnStartTask";

            this.btnStartTask.Size = new System.Drawing.Size(75, 23);

            this.btnStartTask.TabIndex = 1;

            this.btnStartTask.Text = "開(kāi)始任務(wù)";

            this.btnStartTask.UseVisualStyleBackColor = true;

            this.btnStartTask.Click += new System.EventHandler(this.btnStartTask_Click);

            // 

            // MainForm

            // 

            this.ClientSize = new System.Drawing.Size(382, 90);

            this.Controls.Add(this.btnStartTask);

            this.Controls.Add(this.progressBar1);

            this.Name = "MainForm";

            this.Text = "動(dòng)態(tài)等待示例";

            this.ResumeLayout(false);

        }


        private System.Windows.Forms.ProgressBar progressBar1;

        private System.Windows.Forms.Button btnStartTask;

    }

}arp

關(guān)鍵點(diǎn):

  1. ?異步編程?

    • 使用 async 和 await 關(guān)鍵字來(lái)避免阻塞UI線程。
    • 使用 Task.Run 將耗時(shí)操作放到后臺(tái)線程執(zhí)行。
  2. ?UI更新?

    • 使用 this.Invoke 方法確保UI更新在UI線程中執(zhí)行。
  3. ?取消支持?

    • 使用 CancellationTokenSource 以便在需要時(shí)可以取消任務(wù)。
  4. ?ProgressBar控件?

    • 使用 ProgressBarStyle.Marquee 實(shí)現(xiàn)動(dòng)態(tài)效果。

通過(guò)以上步驟,你可以在C# Windows Forms應(yīng)用程序中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的動(dòng)態(tài)等待效果,使用戶在等待耗時(shí)操作時(shí)有良好的體驗(yàn)。


該文章在 2024/11/27 18:47:17 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 最好看的中文字幕高清电影 | 91精品一区二区三区在线播放 | 全网热播最新电影电视剧 | 国产福利在线免费观看 | 国产性午夜视频在线观 | 国产精品亚洲玖玖玖在线观看 | 天天躁日日躁狼狼 | 国产在线观看色窝网 | 中文字幕精品视频第一区第二 | 亚洲成年看片在线观看 | 91视频app污污污 | 国产经典aⅴ三级观看 | 国产精品爽爽va在线观看 | 日本乱理伦片在线观看中文字幕 | 国产在线一区二区三区在线 | 亚洲国产中文日韩精品乱码 | 亚洲日韩在线中文字幕综合 | 亚洲精品国产电影 | 中文字幕国产第1页直播在线 | 日日精品国产高清国产专区 | 欧美日韩一区二区三区综合 | 中文字幕久| 2025卡1卡2卡3精品老狼 | 在线日韩国产 | 噼里啪啦hd免费观看动漫 | 欧美日本一区二区三区在线 | 国产一区二区三区免费在线 | 人片在线观看 | 欧美日本免费一 | 精品国产第 | 欧美视频亚洲视频日韩动漫 | 91精品福利在线观看播放 | 亚洲成国产人片在线观看 | 亚洲人成色4444在线观看 | 中文字幕亚洲精品 | 伊人网视频在线观看 | 婷婷亚洲久悠悠色悠在线播放 | 日本x片成年免费观看视频 性开放的欧美大片黑白配 欧美激合综图片区小说 | 新片速递 | 婷婷开心激情综合五月天 | 亚洲综合另类小说色区一 |