C#多线程下更新UI的几种方法
1. 使用UI线程的SynchronizationContext的Post/Send方法,这种情况一般在窗体构造函数或者FormLoad中获取同步上下文;
范例:
public partial class Form1 : Form
{
SynchronizationContext SyncContext = null;
public Form1()
{
InitializeComponent();
//获取UI线程同步上下文
SyncContext = SynchronizationContext.Current;
}
private void btnOk_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(d=> {
//模拟耗时操作
Thread.Sleep(1000);
SyncContext.Post(m => {
var result = m as string;
txtName.Text = result;
}, "异步操作完成结果");
});
}
}
public partial class Form1 : Form
{
SynchronizationContext SyncContext = null;
public Form1()
{
InitializeComponent();
//获取UI线程同步上下文
SyncContext = SynchronizationContext.Current;
}
private void btnOk_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(d=> {
//模拟耗时操作
Thread.Sleep(1000); SyncContext.Send(m =>
{
var result = m as string;
txtName.Text = result;
}, "异步操作完成结果2");
});
}
}
2、使用Control的Invoke/BegainInvoke方法更新;
范例:
public partial class Form1 : Form
{
// SynchronizationContext SyncContext = null;
public Form1()
{
InitializeComponent();
//获取UI线程同步上下文
//SyncContext = SynchronizationContext.Current;
}
private void btnOk_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(d=> {
//模拟耗时操作
Thread.Sleep(); if (txtName.InvokeRequired)
{
txtName.Invoke(new Action<Control, string>((ctrl, data) => {
ctrl.Text = data;
}), new object[] { txtName, "异步操作完成结果3" });
}
else
{
txtName.Text = "异步操作完成结果3";
}
});
}
}
C#多线程下更新UI的几种方法的更多相关文章
- 转:探讨android更新UI的几种方法
本文转自:http://www.cnblogs.com/wenjiang/p/3180324.html 作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因 ...
- 【转】探讨android更新UI的几种方法----不错
原文网址:http://www.cnblogs.com/wenjiang/p/3180324.html 作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因 ...
- 探讨android更新UI的几种方法
作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因为现实是残酷的,就算一开始的时间和精力非常充足,也会随着项目的推进而逐步消磨殆尽.我们会发现,自己越来越 ...
- 探讨android更新UI的几种方法(转)
作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因为现实是残酷的,就算一开始的时间和精力非常充足,也会随着项目的推进而逐步消磨殆尽.我们会发现,自己越来越 ...
- Android 在子线程中更新UI的几种方法
第一种: new Handler(context.getMainLooper()).post(new Runnable() { @Override public void run() { // 在这里 ...
- Android子线程中更新UI的4种方法
方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage ...
- Android更新UI的几种方法
在Android开发过程中,常需要更新界面的UI.比如网络请求操作.一些耗时操作都不能放在UI线程中运行的,需要放在子线程,而子线程又不能更新UI界面,这是我们需要引入一个Handler,消息处理机制 ...
- 我的Android最佳实践之—— Android更新UI的两种方法:handler与runOnUiThread()
在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面 显示常会报错.抛出异常:android.view.ViewRoo ...
- Android更新UI的两种方法——handler与runOnUiThread()
在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面 显示常会报错.抛出异常:android.view.ViewRoo ...
随机推荐
- guava缓存第一篇
guava缓存主要有2个接口,Cache和LoadingCache. Cache,全类名是com.google.common.cache.Cache,支持泛型.Cache<K, V>. L ...
- html body标签 语法
html body标签 语法 标签body是什么意思? 标签body是一个网页的身体部分,也就是用于定义网页的主体内容,也是一个HTML文档中必须的部分. 作用:定义文档的主体. 广州大理石机械构件 ...
- Static使用
1.什么是static? static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性. 其余控制变量存储方式的关键字为auto.register.extern. 2.为什么要引入sta ...
- MySQL_约束
MySQL中约束的作用是对表中的数据进行限定,保证数据的正确性,完整性,有效性. 分类:(1)主键约束 primary key(2)非空约束 not NULL (3)唯一约束 unique (4)外键 ...
- Oracle数据库锁表查询
--查看数据库最大连接数 select value from v$parameter where name = 'processes'; --更改数据库连接数 alter system scope = ...
- oracle调整链接数
50用户以下:8GB 混用,oracle 占据1GB~3GB内存,open_cursors:300,processes:10050-100用户:16GB 混用,oracle 占据3~4GB内存,ope ...
- 【Python】学习笔记五:缩进与选择
Python最具特色的用缩进来标明成块的代码 缩进 i = 4 j = 2 if i > j: i = i+1 print(i) 这是一个简单的判断,Python的if使用很简单,没有括号等繁琐 ...
- Django REST framework 之 认证 权限 限制
认证是确定你是谁 权限是指你有没有访问这个接口的权限 限制主要是指限制你的访问频率 认证 REST framework 提供了一些开箱即用的身份验证方案,并且还允许你实现自定义方案. 接下类我们就自己 ...
- legend3---阿里云如何多个域名指向同一个网站
legend3---阿里云如何多个域名指向同一个网站 一.总结 一句话总结: 先寻求资料及文档,没有找到的话自己摸索一下就好 结论:多个域名都需要备案 二.阿里云如何多个域名指向同一个网站 当前情况 ...
- Mac securecrt 破解版安装
破解一 1.先链接:https://pan.baidu.com/s/1-1nu4eRf7BmuLg5MtlCRvw 密码:30pq 默认下载到了当前用户的”下载”目录中 在”Finder”中 ...