对多线程操作控件的理解:

控件不能被非创造他的线程修改。需调用控件.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多线程调用控件的更多相关文章

  1. C# winform编程中多线程操作控件方法

    private void Form1_Load(object sender, EventArgs e) { Thread newthread = new Thread(new ThreadStart( ...

  2. C# Winform开发以及控件开发的需要注意的,被人问怕了,都是基础常识

    我是搞控件开发的,经常被人问,所以把一些问题记录了下来!如果有人再问,直接把地址丢给他看. 一. 经常会有人抱怨Winform界面闪烁,下面有几个方法可以尽可能的避免出现闪烁 1.控件的使用尽量以纯色 ...

  3. WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享

    WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享 在WinForm程序中,我们有时需要对某容器内的所有控件做批量操作.如批量判断是否允许为空?批量设置为只读.批量设置 ...

  4. C# 跨线程调用控件

    在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应.  同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线程间操作无效 第一种办法:禁 ...

  5. {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件

    在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...

  6. WinForm窗体及其控件的自适应

    3步骤: 1.在需要自适应的Form中实例化全局变量   AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...

  7. COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小(下)

    源代码下载:MyActiveX20081229.rar 声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改 ...

  8. COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)

    声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...

  9. 转:C# WinForm窗体及其控件的自适应

    一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率>  ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...

随机推荐

  1. CentOS下TFTP服务安装

    CentOS下TFTP服务安装 今天和同学做交换机恢复DCN操作系统的任务,然后需要用到tftp,然后就开始研究.这里对TFTP服务进行介绍以及安装. tftp 比 ftp 更易于管理 tftp 比 ...

  2. 【转】【C++专题】C++ sizeof 使用规则及陷阱分析

    提示:下文例子都经过Visual C++ 6.0验证,平台为win32 Windows. 一.什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gi ...

  3. Git的一些用法

    三. Git的一些用法 1. .gitignore文件 屏蔽文件 : .gitignore文件是告诉Git哪些目录或者文件需要忽略, 这些文件将不被提交; 常用场景 : 写完代码后会执行变异调试等操作 ...

  4. 数组合并去重Array.from

    function uniqArr(){ if(arguments.length == 0) return []; var arr = arguments[0]; for(var i=1;i<ar ...

  5. border.css(解决移动端1px问题)

    由于某些机型分辨率过高,会导致1px变成2-多px像素的问题,引用bordercss解决 @charset "utf-8"; .border, .border-top, .bord ...

  6. 使用not in的子查询

    operand comparison_operator [NOT] in (subquery) =ANY运算符与IN等效 !=ALL或<>ALL运算符与NOT IN 等效 如果子查询返回任 ...

  7. linux下非root用户获得/dev/ttyUSB0的读写权限

    首先查看/dev/ttyUSB0的权限属性,在终端输入: ll /dev/ttyUSB0 teashaw@xiaopeiqing.com:~$ ll /dev/ttyUSB0 crw-rw—- 1 r ...

  8. Zookeeper概念学习系列之分布式事务

    不多说,直接上干货! 初学者来说,肯定会有这么一个疑问.为什么会在zookeeper里牵扯到分布式事务? zookeeper到底是什么? zookeeper实际上是yahoo开发的,用于分布式中一致性 ...

  9. Spark on YARN模式的安装(spark-1.6.1-bin-hadoop2.6.tgz + hadoop-2.6.0.tar.gz)(master、slave1和slave2)(博主推荐)

    说白了 Spark on YARN模式的安装,它是非常的简单,只需要下载编译好Spark安装包,在一台带有Hadoop YARN客户端的的机器上运行即可.  Spark on YARN简介与运行wor ...

  10. swift与OC混编之调用函数

    在桥接头文件里#import oc的.h文件,整个swift工程都能使用该oc文件,在.h里暴露的方法都能被该工程使用 //oc文件 TestOC.h #import @interface TestO ...