WinForm,在另一个线程中更新Form中的数据(转)
Form本身有线程,但对于一些耗时的操作,我们不希望在Form的线程中进行,因为会导致Form线程阻塞,产生假死的现象。
其他线程中操作Form中的控件,总出现“线程间操作无效: 从不是创建控件的线程访问它”,如何解决呢?
很简单,利用委托。
比如:
xForm上有dataGridView1控件,xForm提供updateView()方法,updateView()中需要直接或间接地更新dataGridView,updateView()方法可能会在别的线程中调用。
private delegrate void delegrateUpdateGridView();
private void updateView()
{
if(dataGridView1.InvokeRequired){ //xForm之外的线程调用updateView,则执行if分支
Invoke(new delegrateUpdateGridView(updateGridView)); //委托给xForm线程调用
}
else{
updateGridView(); //如果xForm线程调用updateView,则执行else分支
}
}
private updateGridView() //实现对dataGridView1的更新
{
....更新dataGridView1的代码
}
WinForm,在另一个线程中更新Form中的数据(转)的更多相关文章
- 开启两个线程,一个线程打印A~Z,一个线程打印1~52的数据
开启两个线程,一个线程打印A-Z,一个线程打印1-52的数据 import java.util.concurrent.locks.Condition; import java.util.concurr ...
- android为什么不允许新开启一个线程来更新UI,而是用handler来更新界面
下面是快速创建一个新线程的方法: 第一种:直接创建子线程并启动 new Thread() {@Overridepublic void run() { //这里写入子线程需要做的工作 ...
- (转)Android在子线程中更新Activity中UI的方法
转:http://blog.sina.com.cn/s/blog_3fe961ae0100mvc5.html 在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处 ...
- Django中更新多个对象数据与删除对象的方法
更新多个对象 例如说我们现在想要将Apress Publisher的名称由原来的”Apress”更改为”Apress Publishing”.若使用save()方法,如: ? 1 2 3 >&g ...
- easyui不提交window中的form表单数据
<form id="ff" method="post">, <div id="win" class="easyu ...
- 委托 在其他类中修改form中的控件属性
通常情况下,我们需要在其他业务类中将提示信息时时显示到主界面上,可以通过以下方式 Form1.cs using System; ; i < ; i++) { cb ...
- 使用Condition Variables 实现一个线程安全队列
使用Condition Variables实现一个线程安全队列 测试机: i7-4800MQ .7GHz, logical core, physical core, 8G memory, 256GB ...
- C# WINFORM 线程中更新UI
幸好今天是周末,有时间把这个问题记录一下.在多种语言之间切换,发现开发效率降的很低了,开发成本都集中到调式上了,C/C++这些放弃很久了,突然感觉线程这个问题搞的有点烦躁 我这里提到的线程中更新UI, ...
- Winform Timer用法,Invoke在Timer的事件中更新控件状态
System.Timers.Timer可以定时执行方法,在指定的时间间隔之后执行事件. form窗体上放一个菜单,用于开始或者结束定时器Timer. 一个文本框,显示定时执行方法. public pa ...
随机推荐
- new char()与new char[]区别
char *pc = new char(15); //开辟一个内存单元,并用括号里的初始化(用15来初始化你定义的指针所指向的那个char)char *pc = new char[15]; //开辟一 ...
- linux 下安装 nginx 及所需的各种软件工具
我当前的虚拟机是 vmware 15,用的镜像是centOs 7 CentOS-7-x86_64-DVD-1810.iso 确保你的虚拟机是通网的. 1.如果是新环境,没安装过gcc,那么先安装这个. ...
- 判断指定对象是否进入浏览器可视窗口,true 进入,false 没进入
//判断指定对象是否进入浏览器可视窗口,true 进入,false 没进入 var $win = $(window);//jQuery 的 window 对象 即:文档对象 function isVi ...
- python 使用 jt400.jar
jt400helper.py #coding=utf-8 import jpype import os class JT400Helper(object): def __init__(self, se ...
- C# Ninject使用
Ninject是一个IOC容器,用来解决程序中组件的耦合问题,它的目的在于做到最少配置.简单来讲就是 为我们选择一个想要的类来处理事务. 百度百科的解释:一个快如闪电.超轻量级的基于.Net平台的依赖 ...
- Codeforces Round #557 题解【更完了】
Codeforces Round #557 题解 掉分快乐 CF1161A Hide and Seek Alice和Bob在玩捉♂迷♂藏,有\(n\)个格子,Bob会检查\(k\)次,第\(i\)次检 ...
- typescript 错误记录
经常遇到 typescript 的编译错误,虽然可以绕过去,不过既然采用了,还是解决问题,了解其中的思想比较重要. 一般遇到错误码 error TS2304: Cannot find name ... ...
- 【转】Hive 修改 table、column
表 1.重命名表重命名表的语句如下: ALTER TABLE table_name RENAME TO new_table_name 2.修改表属性: ALTER TABLE table_name S ...
- 【CSP模拟赛】凤凰院凶真(最长公共上升子序列)
题目描述 α世界线.凤凰院凶真创立了反抗SERN统治的组织“瓦尔基里”.为了脱离α线,他需要制作一个世界线变动率测量仪. 测量一个世界线相对于另一个世界线的变动率,实质上就是要求出这两个世界线的最长公 ...
- 怎么把分化成元,并且保留两位小数,用vue来做
<el-table-column prop="amount" label="申请提现金额" width="120" align=&qu ...