异步更新UI的几种方法
①.使用Control.Invoke方式来更新数据        
            foreach (DataGridViewRow dgvr in this.dgv_selected.Rows)
            {
                Application.DoEvents();
                this.progressBar1.Invoke(new MethodInvoker(delegate { this.progressBar1.Maximum = this.dgv_selected.Rows.Count; }));

//this.progressBar1.Invoke(new MethodInvoker(delegate { this.label12.Text = "正在保存:" + dgvr.Cells["Column3"].Value.ToString(); }));
                this.label12.Invoke(new MethodInvoker(delegate { this.label12.Text = "操作进度:" + dgvr.Cells["Column3"].Value.ToString(); }));
                this.label12.Refresh();

this.progressBar1.Invoke(new MethodInvoker(delegate { this.progressBar1.Value++; }));
             }

②.使用委托来更新:
        private delegate void IncreaseProgressBarValue(string username);
        private void updateProgerssBar(string username)
        {
            if (this.progressBar1.InvokeRequired)
            {
                IncreaseProgressBarValue inc = new IncreaseProgressBarValue(updateProgerssBar);
                this.progressBar1.Invoke(inc,new object[]{username});
            }
            else
            {
                this.progressBar1.Value++;
                this.label12.Text = "查询员工:" + username;
                this.label12.Refresh();
            }
        }
使用下面的方式调用委托:
        ThreadStart ts = delegate { updateProgerssBar(dgvr.Cells["EmpName"].Value.ToString()); };
        new Thread(ts).Start();

③.在.net framework4.0中使用TaskScheduler来实时更新UI
        private void AsyncWork()
        {
            // This scheduler will execute tasks
            // on the current SynchronizationContext
            // That is, it will access UI controls safely
            var uis = TaskScheduler.FromCurrentSynchronizationContext();
            for (int i = 0; i < 100; i++)
            {
                Application.DoEvents();
                Task.Factory.StartNew(() =>
                {
                    updateProgressBar();
                }, new CancellationToken(), TaskCreationOptions.None, uis);
            }  
        }
        private void updateProgressBar()
        {
            this.progressBar1.Value++;
            Thread.Sleep(100);
        }

执行异步UI更新的更多相关文章

  1. 【Flutter】功能型组件之异步UI更新

    前言 很多时候会依赖一些异步数据来动态更新UI,比如在打开一个页面时我们需要先从互联网上获取数据,在获取数据的过程中我们显示一个加载框,等获取到数据时我们再渲染页面:又比如想展示Stream(比如文件 ...

  2. C#.NET使用Task,await,async,异步执行控件耗时事件(event),不阻塞UI线程和不跨线程执行UI更新,以及其他方式比较

    使用Task,await,async,异步执行事件(event),不阻塞UI线程和不跨线程执行UI更新 使用Task,await,async 的异步模式 去执行事件(event) 解决不阻塞UI线程和 ...

  3. RxJava2-后台执行耗时操作,实时通知 UI 更新(一)

    一.前言 接触RxJava2已经很久了,也看了网上的很多文章,发现基本都是在对RxJava的基本思想介绍之后,再去对各个操作符进行分析,但是看了之后感觉过了不久就忘了. 偶然的机会看到了开源项目 Rx ...

  4. celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决

    今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...

  5. android开发之在activity中控制另一个activity的UI更新

    转自:http://blog.csdn.net/jason0539/article/details/18075293 第一种方法: 遇到一个问题,需要在一个activity中控制另一个acitivit ...

  6. 【Cocos2d-Js基础教学(7)界面UI更新方法(会用到第三方类库)】

    我们游戏中会遇到很多UI更新的时候,大部分时候我们会remove该节点,再重新绘制的方法来进行UI更新. 但是这种更新效率并不高,这里我推荐大家一个第三方的库,来通过注册更新的方式来对UI进行更新管理 ...

  7. WPF多线程UI更新——两种方法

    WPF多线程UI更新——两种方法 前言 在WPF中,在使用多线程在后台进行计算限制的异步操作的时候,如果在后台线程中对UI进行了修改,则会出现一个错误:(调用线程无法访问此对象,因为另一个线程拥有该对 ...

  8. oc 多线程UI更新

    1.在子线程中是不能进行UI 更新的,而可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误以为分线程可以更新 ...

  9. 更优雅的方式: JavaScript 中顺序执行异步函数

    火于异步 1995年,当时最流行的浏览器--网景中开始运行 JavaScript (最初称为 LiveScript). 1996年,微软发布了 JScript 兼容 JavaScript.随着网景.微 ...

随机推荐

  1. vue里面模板解析数据的时候

    页面中新建信息的时候值之间有多个空格的时候 可以使用pre标签,你写了多少个空格,页面就会渲染出来 html解析 什么是pre标签

  2. MySql系列之单表查询

    单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字的执行 ...

  3. Laravel修炼:服务提供者

    前言   上一篇博客文章收集了关于Laravel服务容器的相关知识(传送门),我们知道了服务容器主要有绑定和解析两个重要功能,那么Laravel这个框架集齐了如此多功能,我们项目可能还需要另外引入一些 ...

  4. 对比学习sass和stylus的常用功能

    在众多的css预处理器语言中,sass和stylus算是十分优秀的两个.本文主要针对两者的常用功能做个简单的对比分析.在对比中了解二者的差异,同时帮助大家更好的掌握这两种预处理语言.本文涉及到的sas ...

  5. unity 天空盒有缝隙的解决方案

    修改天空盒图片的属性:advanced->wrap mode->clamp

  6. hdu 4707 Pet【BFS求树的深度】

    Pet                                                          Time Limit: 4000/2000 MS (Java/Others)  ...

  7. [Recompose] Pass a React Prop to a Stream in RxJS

    When you declare your Component and Props in JSX, you can pass those props along to your RxJS stream ...

  8. 在SSM框架中我设置拦截器filter不能通过注解获取到实现类

    我在用注解注入实现类的时候,出现了这样的错误:如以下截图: 这个地方报出的错误是说明我的一个接口类型的类没有获取到,后来我就想要是我的实现类没有获取到那么我就直接new一个实现类然后再进行调用就会出现 ...

  9. BZOJ5029: 贴小广告 & BZOJ5168: [HAOI2014]贴海报

    [传送门:BZOJ5029&BZOJ5168] 简要题意: 给出m段区间l[i],r[i],表示l[i]到r[i]的数全部变成i,求出最后有多少种不同的数 题解: 线段树+离散化 这是一道经典 ...

  10. ajax --- 解决ajax跨域请求导致session失效的问题

    起因:http是无状态的,因此我们通常需要用到cookie以及session来保存状态,session是在服务器端存储的,会和cookie一起使用,设置了session之后,会发送给浏览器一个cook ...