[转]C#通过委托更新UI(异步加载)

摘要:
我们在使用windowform编程的时候,我们或许可能会越到,各种在窗体加载的时候,会进行其他的操作:1.如果是在加载之前进行其它操作,则整个界面出来的很慢,而且若是时间长的话,页面很久才能出来;2.如果是写在加载之后处理的话,虽然界面出来了,这个时候,出现了假死的状体。但是不能乱点,一点,就有卡死的现象。现在我们利用异步和多线程来控制,并且加上进度条。来做一个界面加载的时候出现很大操作。示例:usingSystem.Windows.Forms;usingSystem.Threading;usingSystem;namespaceThreaddemo1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}delegatevoidaa;//创建一个代理privatevoidForm1_Load{Threadnewthread=newThread;newthread.Start();}voidttread(){pri;}privatedelegatevoidProgressBarShow;privatevoidpri{boolname=richTextBox1.InvokeRequired;//MessageBox.Show;if(!

我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗体加载的时候,会进行其他的操作:

1.如果是在加载之前进行其它操作,则整个界面出来的很慢,而且若是时间长的话,页面很久才能出来;
2.如果是写在加载之后处理的话,虽然界面出来了,这个时候,出现了假死的状体。但是不能乱点,一点,就有卡死的现象。
现在我们利用异步和多线程来控制,并且加上进度条。来做一个界面加载的时候出现很大操作。
示例:

[转]C#通过委托更新UI(异步加载)第1张

usingSystem.Windows.Forms;
usingSystem.Threading;
usingSystem;
namespaceThreaddemo1
{
    public partial classForm1 : Form
    {
        publicForm1()
        {
            InitializeComponent();
        }
        delegate void aa(string s);//创建一个代理
        private void Form1_Load(objectsender, EventArgs e)
        {
            Thread newthread = new Thread(newThreadStart(ttread));
            newthread.Start();
        }
        voidttread()
        {
            pri("77");
        }
        private delegate void ProgressBarShow(inti);
        private void pri(stringp)
        {
            bool name =richTextBox1.InvokeRequired;
            //MessageBox.Show(name.ToString());
            if (!richTextBox1.InvokeRequired)//判断是否需要进行唤醒的请求,如果控件与主线程在一个线程内,可以写成if(!InvokeRequired)
{
                Loadthread();
            }
            else
            {
             //MessageBox.Show("不是同一个线程");
                aa a1 = newaa(pri);
                Invoke(a1, new object[] { p });//执行唤醒操作
}
        }
        private voidLoadthread()
        {
            string s = string.Empty;
            for (int b = 0; b < 10000; b++)
            {
                this.ShowPro(b);
                s +=b.ToString();
            }
            //MessageBox.Show("同一线程内");
LoadRichebox(s);
        }
        voidsend() {
            Thread.CurrentThread.Abort();
        }
        private void LoadRichebox(strings)
        {
            richTextBox1.Text =s;
        }
        private void ShowPro(intvalue)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(newProgressBarShow(ShowPro), value);
            }
            else
            {
                this.progressBar1.Value =value;
                this.label1.Text = value + "% Processing...";
            }
        }
    }
}

[转]C#通过委托更新UI(异步加载)第2张

---------------------
作者:狂奔小蜗牛
来源:CSDN
原文:C# 多线程 异步加载 窗体

版权声明:本文为博主原创文章,转载请附上博文链接!

免责声明:文章转载自《[转]C#通过委托更新UI(异步加载)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇洛谷P2698 [USACO12MAR]花盆Flowerpot函数调用栈、任务队列、事件轮询、宏任务、微任务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

eureka服务列表刷新设置

服务器:当我们启用服务使用者时,它将向服务注册中心发送一个rest请求,以获取上面注册的服务列表。出于性能原因,eureka服务器将维护一个只读缓存服务列表以返回到客户端。默认情况下,缓存列表将每30秒更新一次。如果关闭UseReadOnlyResponseCache,服务器:#将不会读取只读缓存服务列表,因为每30秒刷新一次很慢,所以读/写缓存过期策略Us...

Linux查看机器和硬盘的SN

查看硬件RAID中硬盘的SN#sas端口:[root@~]$smartctl-a/dev/sda dmegaraid,n***序列号:6RJ974SR***#sat端口[root@~]$smarttl-a/dev/sda-dsat+megaraid,n***序列号:6BRJ974SR***查看机器SN[root@~~]$dmidcode-t1**序列号...

安装pygame

在python3中安装pygame库。一段时间后,您可以看到安装成功,并且可以导入pygame...

go语言游戏服务端开发(一)——架构

本教程以Go语言为例。特别是游戏服务进程有更新上线时,稳定性还没有被线上并发验证,宕机的几率会增加,数据丢失的风险也会增加。为了减轻风险,可以考虑把数据缓存跟服务进程分离。对于轻中度游戏,游戏的通信量不会很多,没必要每个分服都有一个长连接socket网关。假设一个分服同时连接服务器的客户端有5k,一台机器的socket网关能支持5w个玩家。因此网关需要参与服...

Crontab详细用法-定时任务详解

LWC“八个字符,有效范围为0-31个月的整数:可以出现”,-*/“四个字符,无效范围为1-12或JAN DECDayofWeek:可以出现”。-*/?因为月日和周日将相互影响。例如,在“分钟”字段中使用5,20表示它将在每分钟的5和20分钟触发一次。50:表示它只能出现在周日和月日域中。如果在DayofWeek域中使用5L,这意味着它将在最后一个星期四触发...

matlab从曲线图提取数据

对于第二条曲线,add_len需要改小,欧式距离的阈值需要改大。...