winform多线程调用控件
对多线程操作控件的理解:
控件不能被非创造他的线程修改。需调用控件.beginvoke,注入UI线程。
控件.beginvoke会把操作加入UI线程,阻塞画面响应。不要把耗时的计算放在控件.beginvoke里。即使多线程下,控件的更新是串行的。
UI线程对控件调用永远优先工作线程,即使开始的比工作线程晚,下例B比C早执行。
例子:
private void button1_Click(object sender, EventArgs e)
{
Thread th= new Thread(delegate()
{
for (int i = ; i < ; i++)
{
System.Threading.Thread.Sleep();//工作线程不阻塞UI线程
DoCreate_test(i);
}
});
th.Start();
richTextBox1.AppendText("\n" + System.Threading.Thread.CurrentThread.Name + ":" + "UI线程开始" + DateTime.Now);//代码A
System.Threading.Thread.Sleep();
richTextBox1.AppendText("\n" + System.Threading.Thread.CurrentThread.Name + ":" + "UI线程结束" + DateTime.Now); //代码B
} private delegate void FlushClient(int i);
private static int a = ;
private void DoCreate_test(int cnt)
{
//非ui线程调用委托
if (richTextBox1.InvokeRequired)
{
FlushClient fc = new FlushClient(DoCreate_test);
this.BeginInvoke(fc,new object[]{cnt});
}
//ui线程直接操作
else
{
//System.Threading.Thread.Sleep(2000); //错误写法阻塞UI线程
richTextBox1.AppendText("\n" + System.Threading.Thread.CurrentThread.Name + ":" +(++a)); //代码C
}
}
执行顺序 代码A>代码B>代码C
winform多线程调用控件的更多相关文章
- C# winform编程中多线程操作控件方法
private void Form1_Load(object sender, EventArgs e) { Thread newthread = new Thread(new ThreadStart( ...
- C# Winform开发以及控件开发的需要注意的,被人问怕了,都是基础常识
我是搞控件开发的,经常被人问,所以把一些问题记录了下来!如果有人再问,直接把地址丢给他看. 一. 经常会有人抱怨Winform界面闪烁,下面有几个方法可以尽可能的避免出现闪烁 1.控件的使用尽量以纯色 ...
- WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享
WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享 在WinForm程序中,我们有时需要对某容器内的所有控件做批量操作.如批量判断是否允许为空?批量设置为只读.批量设置 ...
- C# 跨线程调用控件
在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应. 同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线程间操作无效 第一种办法:禁 ...
- {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件
在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...
- WinForm窗体及其控件的自适应
3步骤: 1.在需要自适应的Form中实例化全局变量 AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...
- COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小(下)
源代码下载:MyActiveX20081229.rar 声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改 ...
- COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)
声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...
- 转:C# WinForm窗体及其控件的自适应
一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率> ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...
随机推荐
- [ActionScript 3.0] 如何获得实例对象的类名及类
package { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.S ...
- jquery事件三 -- load(), ready(), resize()以及bind()事件
例子1 ready() DOM加载完毕 load() 元素加载完毕 resize() 浏览器窗口的大小发生变化 <!DOCTYPE html> <html lang="en ...
- react的一些思考
在做好第一个需求之后,我接到了一个react写的产品,这让我异常的兴奋,终于能写react了 开始做的时候整体框架已经搭建好了,这让我有点小失落,我还以为我要开始搭框架了呢,没事,搭的也挺好的. 有了 ...
- HTML-★★★格式与布局fixed/absolute/relative/z-index/float★★★
很多网页都存在一个悬浮的操作条或者广告区,无论如何上下滚动网页,操作条或广告区都不会动,这个就是div制作,位置锁定在屏幕指定位置,现在我们就学习下网页的格式与布局. position 位置,来给di ...
- php图像处理函数image_type_to_extension、image_type_to_mime_type 的区别
php中获得图像类型的两个函数image_type_to_extension.image_type_to_mime_type,做图像处理的时候一直不清楚这俩个函数有什么区别,今天特意查了一下,有了一些 ...
- ORM查询练习
ORM查询练习 Django ORM ORM查询的练习题 ORM代码 from django.db import models # Create your models here. class Pu ...
- 颠覆我的Thread.join()
学而时习之,不亦说乎! --<论语> 为什么说是颠覆? 1)任何对象都可以作为锁对象,锁对象的行为都是一样的吗?之前我一直认为锁对 ...
- laravel5.5打印sql语句
额.其实laravel很不方便的地方就是sql写错之后不是很好调试. 上方法. //DB::connection()->enableQueryLog(); // 开启QueryLog//$rep ...
- docker jenkins使用(二)
jenkins的安装很简单,但是jenkins的初次使用却很头疼.对于小白来说有点不太明白 背景: 开发更新app需要很多步骤,生成jar包.上传服务器.更新启动程序,如果有很多服务器,那么需要做好多 ...
- 使用FCM服务
1.建谷歌账号 2.在console上新建应用 https://console.firebase.google.com 并下载私钥.json 3.创建测试网页应用 (或app应用) C#服务端: 用H ...