對於winform程序來講,當咱們點擊按鈕,須要消耗必定時長才能拿到數據後才能顯示在界面上某個控件上的狀況,咱們一般會專門開一個線程去拿數據,這樣不會形成界面處於假死狀態異步
//啓動線程 private void button1_Click(object sender, EventArgs e) { Thread t = new Thread(GetValue); t.IsBackground = true; t.Start(); } void GetValue() { Thread.Sleep(2000);//耗時操做 string content = "hi!"; label1.Invoke(new Action(() => { label2.Text = content; }));//控件回調,顯示數據 }
//啓動線程 private void button1_Click(object sender, EventArgs e) { Thread t = new Thread(GetValue); t.IsBackground = true; t.Start(); } //加載比較耗時的數據 void GetValue() { Thread.Sleep(2000); string value = "hello,異步!"; InvokeHelper.Invoke(this, "DoWork", value);//演示invoke方法 InvokeHelper.Set(label1, "Text", "兔");//演示set方法 object temp = InvokeHelper.Get(label1, "Tag"); //演示Get方法 InvokeHelper.Set(label2, "Text", temp); } //控件賦值賦值 public void DoWork(string value) { richTextBox1.Text = value; }
方法簡介:函數
功能:主要用於其餘線程作完耗時操做拿到數據後,給UI線程上的控件賦值學習
參數:Contorl指代控件,methodName表示當天cs文件中一個方法的名字,用於在這個方法下進行控件的賦值操,args是這個methodName這個方法的參數類型this
使用方式:見上面代碼的調用過程.相信你能看懂,並不難。spa
功能:從其餘線程裏跨線程拿取UI控件的值.net
參數 :Control,將要訪問的控件;propertyName,控件的屬性值線程
使用方式:見上面的使用案例code
功能:從其餘線程裏跨線程拿取UI控件的值orm
參數:Control,將要訪問的控件;noncontrol,一個擴展對象,若是不爲null則該函數的功能時拿取該對象的屬性值;propertyName,控件的屬性值xml
使用方式:object t=InvokeHelper.Get(label1,label1.TopLevelControl,"Text"); //這樣拿到的將是lable控件頂層容器的Text屬性值
功能:從其餘線程給UI線程控件設置一個值
參數:Control,控件;propertyName,控件屬性值;value,將要賦值給控件屬性的數據
使用方式:見上面的實例
功能:從其餘線程給UI線程控件設置一個值
參數:Control,控件;propertyName,控件屬性值;noncontrol,一個擴展對象,若是不會null,則該函數的功能是設置該擴展對象的屬性值;value,將要賦值給控件屬性的數據
使用方式: InvokeHelper.Set(label1, label1.TopLevelControl, "Text","Hello");將hello賦值給label1的父級控件的text屬性
xml註釋下載 密碼:hd0z
dll下載 密碼:9wve
本人qq:739462304歡迎你們一塊兒交流學習