標籤:private send win .text gen oid set model pre
通過一個子線程來操作主線程中的控制項,但是,這樣作會出現一個問題(1所示),就是TextBox控制項是在主線程中建立的,在子線程中並沒有對其進行建立,也就是從不是建立控制項的線程訪問它。那麼,如何解決跨線程調用Windows表單控制項呢?可以用線程委託實現跨線程調用Windows表單控制項。下面將上一個例子進行一下改動。代碼如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; using System.Threading;//添加線程的命名空間 namespace ppp{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } Thread t; //定義線程變數 private void button1_Click(object sender, EventArgs e) { t = new Thread(new ThreadStart(Threadp)); //執行個體化線程 t.Start();//啟動線程 } private delegate void setText();//定義一個線程委託自訂方法Threadp,主要用於線程的調用。代碼如下: public void Threadp() { setText d = new setText(Threading); //執行個體化一個委託 this.Invoke(d); //在擁用此控制項的基礎表單控制代碼的線程上執行指定的委託 }自訂方法Threading,主要作於委託的調用。代碼如下: public void Threading() { textBox1.Text = "實現在子線程中操作主線程中的控制項"; t.Abort();//關閉線程 } }}
如何跨線程調用Windows表單控制項