WinForm跨線程UI操作常用控件類大全

圖片來(lái)自網(wǎng)絡(luò)/圖文無(wú)關(guān)

前言

在C#開(kāi)發(fā)的WinForm窗體程序開(kāi)發(fā)的時(shí)候,經(jīng)常會(huì)使用多線程處理一些比較耗時(shí)之類的操作欣喧。不過(guò)會(huì)有一個(gè)問(wèn)題:就是涉及到跨線程操作UI元素。
相信才開(kāi)始接觸的人一定會(huì)遇上這個(gè)問(wèn)題。

為了解決這個(gè)問(wèn)題妹孙,可以通過(guò)委托來(lái)實(shí)現(xiàn)。

我為了后期使用更加方便获枝,就將常用的幾個(gè)控件(TextBox蠢正、Label、CheckBox省店、RadioButton嚣崭、ProgressBar)UI操作進(jìn)行了封裝,源碼可以在github上查看:GitHub倉(cāng)庫(kù)地址懦傍。
源碼在github倉(cāng)庫(kù)中的XY.WINUI.ControlEx.InvokeEx文件夾中

測(cè)試窗體

使用示例

在測(cè)試項(xiàng)目中有使用的方法雹舀,這里只做簡(jiǎn)單介紹。
調(diào)用方法在Invokes類中粗俱,也可以使用單獨(dú)的類調(diào)用说榆。

例如:在窗體中為tbName的TextBox設(shè)置和獲取值

//首先,使用命名空間
using XY.WINUI.ControlEx.InvokeEx;

//第一種
//設(shè)置TextBox的值
Invokes.SetTextBoxText(tbName,"TextBox文本");
//獲取TextBox的值
string value = Invokes.GetTextBoxText(tbName);


//第二種
//設(shè)置TextBox的值
TextBoxInvoke.SetTextBoxText(tbName,"TextBox文本");
//獲取TextBox的值
string value = TextBoxInvoke.GetTextBoxText(tbName);

幫助類源碼

這是部分的代碼寸认,需要詳細(xì)了解可以在 GitHub 上查看娱俺。

集合類(Invokes.cs)
Invokes.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace XY.WINUI.ControlEx.InvokeEx
{
    public class Invokes
    {
        #region //Controls

        #region // TextBox
        /// <summary>
        /// 設(shè)置文本框文本
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Text"></param>
        public static void SetTextBoxText(TextBox Ctrl, string Text)
        {
            TextBoxInvoke.SetTextBoxText(Ctrl, Text);
        }

        /// <summary>
        /// 獲取文本框文本方法
        /// </summary>
        /// <param name="Ctrl"></param>
        public static string GetTextBoxText(TextBox Ctrl)
        {
            return TextBoxInvoke.GetTextBoxText(Ctrl); ;
        }
        #endregion

        #region // Label
        /// <summary>
        /// 設(shè)置標(biāo)簽文本
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Text"></param>
        public static void SetLabelText(Label Ctrl, string Text)
        {
            LabelInvoke.SetLabelText(Ctrl, Text);
        }

        /// <summary>
        /// 獲取標(biāo)簽文本方法
        /// </summary>
        /// <param name="Ctrl"></param>
        public static string GetLabelText(Label Ctrl)
        {
            return LabelInvoke.GetLabelText(Ctrl); ;
        }
        #endregion 

        #region // RadioButton
        /// <summary>
        /// 獲取單選按鈕選中狀態(tài)
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <returns></returns>
        public static bool GetRadioButtonChecked(RadioButton Ctrl)
        {
            return RadioButtonInvoke.GetRadioButtonChecked(Ctrl);
        }

        /// <summary>
        /// 設(shè)置單選按鈕選中狀態(tài)
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Checked"></param>
        public static void SetRadioButtonChecked(RadioButton Ctrl, bool Checked)
        {
            RadioButtonInvoke.SetRadioButtonChecked(Ctrl, Checked);
        }
        #endregion

        #region // CheckBox
        /// <summary>
        /// 獲取選擇按鈕選中狀態(tài)
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <returns></returns>
        public static bool GetCheckBoxChecked(CheckBox Ctrl)
        {
            return CheckBoxInvoke.GetCheckBoxChecked(Ctrl);
        }

        /// <summary>
        /// 設(shè)置選擇按鈕選中狀態(tài)
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Checked"></param>
        public static void SetCheckBoxChecked(CheckBox Ctrl, bool Checked)
        {
            CheckBoxInvoke.SetCheckBoxChecked(Ctrl, Checked);
        }
        #endregion

        #region // ProgressBar
        /// <summary>
        /// 獲取進(jìn)度條值
        /// </summary>
        /// <param name="Ctrl"></param>
        public static int GetProgressBarValue(ProgressBar Ctrl)
        {
            return ProgressBarInvoke.GetProgressBarValue(Ctrl);
        }
        /// <summary>
        /// 設(shè)置進(jìn)度條值
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Value"></param>
        public static void SetProgressBarValue(ProgressBar Ctrl, int Value)
        {
            ProgressBarInvoke.SetProgressBarValue(Ctrl, Value);
        }

        /// <summary>
        /// 獲取進(jìn)度條最小值
        /// </summary>
        /// <param name="Ctrl"></param>
        public static int GetProgressBarMinValue(ProgressBar Ctrl)
        {
            return ProgressBarInvoke.GetProgressBarMinValue(Ctrl);
        }
        /// <summary>
        /// 設(shè)置進(jìn)度條最小值
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Value"></param>
        public static void SetProgressBarMinValue(ProgressBar Ctrl, int Value)
        {
            ProgressBarInvoke.SetProgressBarMinValue(Ctrl, Value);
        }

        /// <summary>
        /// 獲取進(jìn)度條最大值
        /// </summary>
        /// <param name="Ctrl"></param>
        public static int GetProgressBarMaxValue(ProgressBar Ctrl)
        {
            return ProgressBarInvoke.GetProgressBarMaxValue(Ctrl);
        }
        /// <summary>
        /// 設(shè)置進(jìn)度條最大值
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Value"></param>
        public static void SetProgressBarMaxValue(ProgressBar Ctrl, int Value)
        {
            ProgressBarInvoke.SetProgressBarMaxValue(Ctrl, Value);
        }
        #endregion

        #endregion

        #region // Common

        #region // Visible
        /// <summary>
        /// 獲取控件是否可見(jiàn)委托
        /// </summary>
        /// <param name="Ctrl"></param>
        private delegate bool GetControlVisibleDelegate(Control Ctrl);
        /// <summary>
        /// 設(shè)置控件是否可見(jiàn)委托
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Visible"></param>
        private delegate void SetControlVisibleDelegate(Control Ctrl, bool Visible);

        /// <summary>
        /// 獲取控件是否可見(jiàn)方法
        /// </summary>
        /// <param name="Ctrl"></param>
        private static bool GetControlVisibleFunc(Control Ctrl)
        {
            return Ctrl.Visible;
        }

        /// <summary>
        /// 獲取控件是否可見(jiàn)
        /// </summary>
        /// <param name="flag"></param>
        public static bool GetControlVisible(Control Ctrl)
        {
            return (bool)Ctrl.Invoke(new SetControlVisibleDelegate(SetControlVisibleFunc), new object[] { Ctrl });
        }

        /// <summary>
        /// 設(shè)置控件是否可見(jiàn)方法
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Visible"></param>
        private static void SetControlVisibleFunc(Control Ctrl, bool Visible)
        {
            Ctrl.Visible = Visible;
            Ctrl.Refresh();
        }

        /// <summary>
        /// 設(shè)置控件是否可見(jiàn)
        /// </summary>
        /// <param name="Ctrl"></param>
        /// <param name="Visible"></param>
        public static void SetControlVisible(Control Ctrl, bool Visible)
        {
            Ctrl.Invoke(new SetControlVisibleDelegate(SetControlVisibleFunc), new object[] { Ctrl, Visible });
        } 
        #endregion

        #endregion
    }
}

由于排版問(wèn)題,就不過(guò)多展示代碼了废麻,可以在github倉(cāng)庫(kù)查看荠卷。

會(huì)持續(xù)更新……

歡迎大家補(bǔ)充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烛愧,一起剝皮案震驚了整個(gè)濱河市油宜,隨后出現(xiàn)的幾起案子掂碱,更是在濱河造成了極大的恐慌,老刑警劉巖慎冤,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疼燥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蚁堤,警方通過(guò)查閱死者的電腦和手機(jī)醉者,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)披诗,“玉大人撬即,你說(shuō)我怎么就攤上這事〕识樱” “怎么了剥槐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)宪摧。 經(jīng)常有香客問(wèn)我粒竖,道長(zhǎng),這世上最難降的妖魔是什么几于? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任蕊苗,我火速辦了婚禮,結(jié)果婚禮上沿彭,老公的妹妹穿的比我還像新娘朽砰。我一直安慰自己,他們只是感情好膝蜈,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布锅移。 她就那樣靜靜地躺著,像睡著了一般饱搏。 火紅的嫁衣襯著肌膚如雪非剃。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,713評(píng)論 1 312
  • 那天推沸,我揣著相機(jī)與錄音备绽,去河邊找鬼。 笑死鬓催,一個(gè)胖子當(dāng)著我的面吹牛肺素,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宇驾,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼倍靡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了课舍?” 一聲冷哼從身側(cè)響起塌西,我...
    開(kāi)封第一講書(shū)人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤他挎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后捡需,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體办桨,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年站辉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呢撞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饰剥,死狀恐怖殊霞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捐川,我是刑警寧澤脓鹃,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布逸尖,位于F島的核電站古沥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏娇跟。R本人自食惡果不足惜岩齿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苞俘。 院中可真熱鬧盹沈,春花似錦、人聲如沸吃谣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岗憋。三九已至肃晚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仔戈,已是汗流浹背关串。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留监徘,地道東北人晋修。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像凰盔,于是被迫代替她去往敵國(guó)和親墓卦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容