狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

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

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

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

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

示例步驟:

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

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

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

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

示例代碼:

以下是一個完整的示例代碼,演示了如何實現(xiàn)動態(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)整以更改動畫速度


            // 禁用按鈕以防止重復點擊

            btnStartTask.Enabled = false;


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

            await RunLongRunningTaskAsync();


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

            progressBar1.Style = ProgressBarStyle.Blocks;

            progressBar1.MarqueeAnimationSpeed = 0;

            btnStartTask.Enabled = true;


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

        }


        private async Task RunLongRunningTaskAsync()

        {

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

            var cts = new CancellationTokenSource();


            try

            {

                // 模擬耗時任務

                await Task.Run(() =>

                {

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

                    {

                        // 模擬工作的一部分

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


                        // 報告進度(可選,用于更新UI進度條)

                        // 這里進度條僅僅是示意,因為使用的是Marquee風格

                        this.Invoke(new Action(() =>

                        {

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

                            // progressBar1.Value = i; // 僅對Blocks風格有效

                        }));


                        // 檢查是否請求取消

                        if (cts.Token.IsCancellationRequested)

                        {

                            cts.Token.ThrowIfCancellationRequested();

                        }

                    }

                }, cts.Token);

            }

            catch (OperationCanceledException)

            {

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

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

            }

            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 = "開始任務";

            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 = "動態(tài)等待示例";

            this.ResumeLayout(false);

        }


        private System.Windows.Forms.ProgressBar progressBar1;

        private System.Windows.Forms.Button btnStartTask;

    }

}arp

關(guān)鍵點:

  1. ?異步編程?

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

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

    • 使用 CancellationTokenSource 以便在需要時可以取消任務。
  4. ?ProgressBar控件?

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

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


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