在WinForm中,UI線程(主線程)和后臺線程(子線程)之間的交互通常通過以下方式實現:
this.Invoke((MethodInvoker)delegate {
// 在UI線程上執行需要訪問UI控件的工作
label1.Text = "Hello, World!";
});
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (sender, e) => {
// 在后臺線程執行耗時操作
Thread.Sleep(1000);
e.Result = "Hello, World!";
};
worker.RunWorkerCompleted += (sender, e) => {
// 在UI線程更新UI控件
label1.Text = e.Result.ToString();
};
worker.RunWorkerAsync();
private async void button1_Click(object sender, EventArgs e) {
// 在后臺線程執行異步操作
string result = await Task.Run(() => {
Thread.Sleep(1000);
return "Hello, World!";
});
// 在UI線程更新UI控件
label1.Text = result;
}
通過以上方法,可以實現UI線程和后臺線程之間的有效交互,確保在更新UI控件時不會因為線程安全問題而導致應用程序崩潰。