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

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

主站蜘蛛池模板: 国产suv精品一区二区6 | 里啪啦影院大全 | 午夜成人影院 | 国产一区二区在线播放女友 | 国产在线观看码高 | 精品国产sm捆绑最大网免费站 | 国产suv精品一区二区四 | 无毒不卡在线观看无需下载 | 无人区码一码二码三 | 日韩淫片一区二区 | 韩国漂亮美女三级在线观看 | 青青爽在线视频精品 | 99在线精品免费视频九九视 | 国产精品玩偶在线 | 高清精品一区二区三区 | 国产国产人免费人成 | 7777欧美成是 | 美女视频黄a视频全免费网站二区 | 国产精品一区二区三区 | 激情综合一区二区三区 | 国产偷伦视频片免费视频 | 热门电影、电视剧、动 | 国产精品高清自在线 | 国产精品第一页第一页 | 欧美一级欧美一级高清 | 91高清影院 | 亚洲a日本一区二区 | 91直播在线观看免费 | 国产人妖视频一区二区 | 免费无毒a网站在线观看 | 91人前露出精品国产 | 日韩一区二区三区四区中文字幕 | 在线观看国产亚洲视频免费 | 欧美日韩欧美一区 | 国产99久60在线视频 | 婷庭九月天综合水蜜桃 | 国内精品视频在线 | 性国产videofree高清 | 99re热有精品视频国产 | 国产视频精品免费 | 一区二区三区四区在线播放视频 |