[轉]C#經過委託更新UI(異步加載)

咱們在使用 windowform 編程的時候,咱們或許可能會越到,各類在窗體加載的時候,會進行其餘的操做:編程

1.若是是在加載以前進行其它操做,則整個界面出來的很慢,並且如果時間長的話,頁面好久才能出來;
2.若是是寫在加載以後處理的話,雖然界面出來了,這個時候,出現了假死的狀體。可是不能亂點,一點,就有卡死的現象。
如今咱們利用異步和多線程來控制,而且加上進度條。來作一個界面加載的時候出現很大操做。
示例:多線程

using System.Windows.Forms;
using System.Threading;
using System;
 
namespace Threaddemo1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        delegate void aa(string s);//建立一個代理
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Thread newthread = new Thread(new ThreadStart(ttread));
            newthread.Start();
        }
        void ttread()
        {
            pri("77");
        }
        private delegate void ProgressBarShow(int i);
        private void pri(string p)
        {
            bool name = richTextBox1.InvokeRequired;
            //MessageBox.Show(name.ToString());
            if (!richTextBox1.InvokeRequired)//判斷是否須要進行喚醒的請求,若是控件與主線程在一個線程內,能夠寫成if(!InvokeRequired)
            {
                Loadthread();
            }
            else
            {
             //   MessageBox.Show("不是同一個線程");
                aa a1 = new aa(pri);
                Invoke(a1, new object[] { p });//執行喚醒操做
            }
        }
 
        private void Loadthread()
        {
            string s = string.Empty;
            for (int b = 0; b < 10000; b++)
            {
                this.ShowPro(b);
                s += b.ToString();
            }
            //MessageBox.Show("同一線程內");
            LoadRichebox(s);
        }
        void send() {
            Thread.CurrentThread.Abort();
        }
        private void LoadRichebox(string s)
        {
            richTextBox1.Text = s;
        }
        private void ShowPro(int value)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new ProgressBarShow(ShowPro), value);
            }
            else
            {
                this.progressBar1.Value = value;
                this.label1.Text = value + "% Processing...";
            }
        }
    }
}

 

 


---------------------
做者:狂奔小蝸牛
來源:CSDN
原文:C# 多線程 異步加載 窗體異步

版權聲明:本文爲博主原創文章,轉載請附上博文連接!ui

相關文章
相關標籤/搜索