在 WinForms 應用中,主線程(UI 線程)包含按鈕,子線程中定義的類需要獲取按鈕點擊事件並執行後續任務。直接跨線程訪問 UI 控件會拋出異常,需採用線程安全的通信機制。
// 定義事件參數
public class TaskEventArgs : EventArgs {
public string Parameter { get; set; }
}
// 主線程 Form
public partial class MainForm : Form {
public event EventHandler<TaskEventArgs> TaskRequested;
private void btnStart_Click(object sender, EventArgs e) {
TaskRequested?.Invoke(this, new TaskEventArgs { Parameter = "data" });
}
}
// 子線程類
public class Worker {
public void Subscribe(MainForm form) {
form.TaskRequested += OnTaskRequested;
}
private void OnTaskRequested(object sender, TaskEventArgs e) {
// 在此執行耗時任務,若需更新 UI 請用 Invoke/BeginInvoke
Task.Run(() => DoWork(e.Parameter));
}
}
C# 子線程響應主線程按鈕點擊,事件驅動模式,跨線程 UI 操作安全實踐。