星期日, 4月 17, 2022

[C#] 跨執行序更新控件

公司內透過 Quartz 來進行排程,該排程有更新控件並顯示相關資料需求,參考官方文章 - How to make thread-safe calls to controls (Windows Forms .NET),透過 Invoke 搭配 delegate 來處理,避免發生更新 UI Thread 上控件,會拋出 Exception

官方文件 Code 整理,就不直接操作 thread 囉
using System;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ThreadSafeSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Task.Run(() => 
            {
                WriteTextSafe("This text was set safely.");
            });
        }

        public void WriteTextSafe(string text)
        {
            if (textBox1.InvokeRequired)
            {
                textBox1.Invoke(new Action(() => WriteTextSafe(text)));
            }
            else
            {
                textBox1.Text = text;
            }
        }
    }
}

沒有留言:

張貼留言