首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 模態視窗進度條跨執行緒安全更新實作:InvokeRequired 與委派回呼模式

     編輯:關於C語言

Form2 程式碼

public partial class Form2 : Form
{
    public Form2() { InitializeComponent(); }

    public delegate void SetProgressCallback(int total, int current);

    public void SetProgress(int total, int current)
    {
        if (this.InvokeRequired)
        {
            try
            {
                this.Invoke(new SetProgressCallback(SetProgress), total, current);
            }
            catch { /* 忽略視窗關閉時的例外 */ }
        }
        else
        {
            progressBar1.Maximum = total;
            progressBar1.Value = current;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.Cancel;
    }
}

模式解析:

  1. 定義委派 SetProgressCallback 匹配目標方法簽章。
  2. 在 SetProgress 中檢查 InvokeRequired:若在非 UI 執行緒,透過 Invoke 封送回 UI 執行緒執行;否則直接更新控件。
  3. try-catch 防止視窗已關閉時 Invoke 拋出例外。

此模式適用於所有跨執行緒更新 WinForm 控件的情境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved