c#winform跨線程訪問控件

1.背景

對於winform程序來講,當咱們點擊按鈕,須要消耗必定時長才能拿到數據後才能顯示在界面上某個控件上的狀況,咱們一般會專門開一個線程去拿數據,這樣不會形成界面處於假死狀態異步

2.常規作法

//啓動線程
        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; }));//控件回調,顯示數據
        }

3.封裝異步加載數據,造成輪子,方便之後直接使用示例

//啓動線程
        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;
        }

4.該Rabbit.InvokeHelper.DLL使用說明手冊

   方法簡介:函數

 I.public static object Invoke(Control control, string methodName, params object[] args)  

    功能:主要用於其餘線程作完耗時操做拿到數據後,給UI線程上的控件賦值學習

    參數:Contorl指代控件,methodName表示當天cs文件中一個方法的名字,用於在這個方法下進行控件的賦值操,args是這個methodName這個方法的參數類型this

    使用方式:見上面代碼的調用過程.相信你能看懂,並不難。spa

II.  public static object Get(Control control, string propertyName)

    功能:從其餘線程裏跨線程拿取UI控件的值.net

    參數 :Control,將要訪問的控件;propertyName,控件的屬性值線程

    使用方式:見上面的使用案例code

III.  public static object Get(Control control, object noncontrol, string propertyName)

   功能:從其餘線程裏跨線程拿取UI控件的值orm

   參數:Control,將要訪問的控件;noncontrol,一個擴展對象,若是不爲null則該函數的功能時拿取該對象的屬性值;propertyName,控件的屬性值xml

   使用方式:object t=InvokeHelper.Get(label1,label1.TopLevelControl,"Text"); //這樣拿到的將是lable控件頂層容器的Text屬性值

IV.  public static void Set(Control control, string propertyName, object value)

   功能:從其餘線程給UI線程控件設置一個值

   參數:Control,控件;propertyName,控件屬性值;value,將要賦值給控件屬性的數據

   使用方式:見上面的實例

V. public static void Set(Control control, object noncontrol, string propertyName, object value)

   功能:從其餘線程給UI線程控件設置一個值

   參數:Control,控件;propertyName,控件屬性值;noncontrol,一個擴展對象,若是不會null,則該函數的功能是設置該擴展對象的屬性值;value,將要賦值給控件屬性的數據

  使用方式: InvokeHelper.Set(label1, label1.TopLevelControl, "Text","Hello");將hello賦值給label1的父級控件的text屬性

5.dll下載

xml註釋下載  密碼:hd0z        

dll下載      密碼:9wve

6.關於

本人qq:739462304歡迎你們一塊兒交流學習

相關文章
相關標籤/搜索