狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区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 編輯過
點晴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