国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#線程操作UI控件

這篇具有很好參考價(jià)值的文章主要介紹了C#線程操作UI控件。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在寫winform程序時(shí)候,如果時(shí)間長(zhǎng)的操作不用線程操作。那么會(huì)卡死UI,點(diǎn)擊界面就體現(xiàn)為未響應(yīng)。為此需要對(duì)耗時(shí)操作用線程處理,比如檢驗(yàn)的監(jiān)聽程序就是一個(gè)死循環(huán),不停檢查文件夾或數(shù)據(jù)庫(kù)又沒有數(shù)據(jù),然后上傳。如果不時(shí)有線程,在數(shù)據(jù)多的情況,程序是基本點(diǎn)不動(dòng)的,這樣體驗(yàn)就很不好。

1.首先拖個(gè)文本框準(zhǔn)備用線程給里面寫文本
c# ui,C#,c#,ui,開發(fā)語言

2.測(cè)試代碼,創(chuàng)建一個(gè)線程,直接操作UI控件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace ThreadUI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 加載方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            //用線程寫文本
            Thread t = new Thread(WriteTxt);
            t.Start();

        }

        /// <summary>
        /// 寫文本
        /// </summary>
        public void WriteTxt()
        {
            for(int i=0;i<100;i++)
            {
                richTextBox1.Text += "第" + i + "行\(zhòng)n";
            }

        }

    }
}

3.運(yùn)行報(bào)錯(cuò),這里報(bào)錯(cuò)不能從線程訪問UI控件
c# ui,C#,c#,ui,開發(fā)語言

那么對(duì)于線程運(yùn)行長(zhǎng)時(shí)間操作,想和UI交互怎么辦呢?

這里需要用委托解決線程和UI交互:
1.先定義一個(gè)委托
2.把操作UI的方法再用委托包一層
3.線程調(diào)用包裝的方法

調(diào)整代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace ThreadUI
{
    /// <summary>
    /// 寫日志委托
    /// </summary>
    /// <param name="info"></param>
    public delegate void WriteInfoDelegate(string info);

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 加載方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            //用線程寫文本
            Thread t = new Thread(WriteTxt);
            t.Start();

        }

        /// <summary>
        /// 寫日志代理方法
        /// </summary>
        /// <param name="info"></param>
        public void WriteInfoProxy(string info)
        {
            //組裝參數(shù)
            object[] paras = new object[] { info };
            //在UI線程執(zhí)行委托
            this.Invoke(new WriteInfoDelegate(SetTxt), paras);
        }

        /// <summary>
        /// 操作控件邏輯
        /// </summary>
        /// <param name="info"></param>
        public void SetTxt(string info)
        {
            richTextBox1.Text += info;
        }

        /// <summary>
        /// 寫文本
        /// </summary>
        public void WriteTxt()
        {
            for(int i=0;i<100;i++)
            {
                WriteInfoProxy("第" + i + "行\(zhòng)n");
            }

        }

    }
}

就不會(huì)異常了
c# ui,C#,c#,ui,開發(fā)語言

C#的委托我理解為函數(shù)指針,和C及C++里的指針不同的是他類型化更明顯了。什么類型的委托可以初始化什么類型的方法委托變量。這樣就可以把函數(shù)指針到處傳遞了。在子彈窗觸發(fā)父窗體刷新等也基于委托調(diào)用也是一個(gè)很好的方式。千萬別到父頁面搞個(gè)靜態(tài)方法這種方式給子頁面調(diào)額。這種太死了,借助委托可以把方法層層傳遞給任何要調(diào)用的地方。

iMedicalLIS監(jiān)聽程序的基礎(chǔ)就基于線程和委托來實(shí)現(xiàn)異步,防止卡UI。文章來源地址http://www.zghlxwxcb.cn/news/detail-537040.html

到了這里,關(guān)于C#線程操作UI控件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包