执行异步UI更新
异步更新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);
}
最新文章
- 本地部署arcgis by eclipse
- Wpf之Xaml属性值和特性值(一)
- 【转】 linux 下Time_wait过多问题解决
- 第26天 swift reflect
- c# 调用 ShellExecute
- uglifyjs压缩JS
- LeetCode_Reverse Integer
- 【转】java中byte, int的转换, byte String转换
- Python 爬取美女图片,分目录多级存储
- arm_linux_device_mem内存映射
- Linux实战案例(6)yum查找、卸载、和安装软件
- Python条件判断 if-else for循环 while循环 break continue
- 201621123002《JAVA程序设计》第十四周学习总结
- (四)JavaScript 语句
- maven详细配置
- 深入理解java虚拟机---java虚拟机的发展史(四)
- windows远程访问ubuntu下的jupyter notebook必要配置
- log4j的配置详解(转)
- Centos下用yum命令按照jdk
- Java序列化接口Serializable接口的作用总结
热门文章
- Mac安装composer安装Yii2项目
- TypeError: &#39;dict&#39; object is not callabled
- Html Input disabled属性
- Hexo Next 调优
- win2003系统同步Linux ntp server批处理
- [转载]-win7启动本地MongoDB的四种方式
- python 异步IO-aiohttp与简单的异步HTTP客户端/服务器
- ArcGIS api for javascript——鼠标悬停时显示信息窗口
- BZOJ 2242 [SDOI2011]计算器 BSGS+高速幂+EXGCD
- Android开发之Volley网络通信框架