php线程安全和非线程安全_安全调用线程的步骤
1.声明方法
2.声明委托类型
3.创建委托对象
4.启动线程
5.在线程调用的方法里通过Control的Invoke方法执行委托
public Form1()
{
InitializeComponent();
//TextBox.CheckForIllegalCrossThreadCalls = false;//线程访问控件(不安全的方式)
dgShowMsgInTextBox = new DGShowMsgInTextBox(DoShowMsgInTextBox);
}
private void btnCount_Click(object sender, EventArgs e)
{
Count();
}
private void Count()//用UI计数(不另外开启线程)
{
DateTime beginTime = DateTime.Now;
for (int i = 0; i < 999999999; i++) { }
System.Threading.Thread.Sleep(3000);
DateTime endTime = DateTime.Now;
TimeSpan ts = endTime.Subtract(beginTime);
MessageBox.Show("计算完毕,总耗时:" + ts.TotalMilliseconds.ToString());
}
private void btnCountByThread_Click(object sender, EventArgs e)//用线程计数
{
//创建线程对象(传入委托对象),也可以直接传方法
Thread thread = new Thread(Count);
thread.Name = "t1";
//将线程标记为可以开始了
thread.Start();
}
private void button1_Click(object sender, EventArgs e)//不安全的访问控件
{
Thread threa = new Thread(CountAndShow);
threa.Start();
}
private void CountAndShow()//不安全的方式访问控件-需要设置TextBox.CheckForIllegalCrossThreadCalls = false
{
DateTime beginTime = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
txtNum.Text = i.ToString();
}
DateTime endTime = DateTime.Now;
TimeSpan ts = endTime.Subtract(beginTime);
MessageBox.Show("计算完毕,总耗时:" + ts.TotalMilliseconds.ToString());
}
private void CountAndShowSafety()//安全的访问UI线程上的控件
{
DateTime beginTime = DateTime.Now;//记录开始时间
for (int i = 0; i < 10000000; i++)
{
//调用Control类的Invoke方法 执行委托里的 方法
this.Invoke(dgShowMsgInTextBox, i.ToString());
}
DateTime endTime = DateTime.Now;//记录结束时间
TimeSpan ts = endTime.Subtract(beginTime);//计算时间差
MessageBox.Show("计算完毕,总耗时:" + ts.TotalMilliseconds.ToString());
//Random r = new Random();
//r.Next(10)
}
private void button2_Click(object sender, EventArgs e)//安全的访问控件 需要使用委托,并最终通过Control的Invoke方法执行
{
Thread tread = new Thread(CountAndShowSafety);
tread.Start();
}
delegate void DGShowMsgInTextBox(string msg);//安全访问控件的代码 声明一个委托类型
DGShowMsgInTextBox dgShowMsgInTextBox = null;//声明该委托的一个对象(在窗体的构造函数中实例化的),在线程执行代码中要访问控件时通过Invoke方法调用
void DoShowMsgInTextBox(string msg)
{
txtNum.Text = msg;
}
![](/assets/blank.gif)
![](/assets/blank.gif)
php线程安全和非线程安全_安全调用线程的步骤相关推荐
- Java线程池状态判断源码_深入浅出Java线程池:源码篇
前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用.(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适).本文则深入线程池的源码,主要是介绍Thr ...
- python线程协程进程的区别_进程和线程、协程的区别
现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来.python中有协程库gevent,py web框架tornado中也用了gevent封装好的协程.本文主要介绍进程.线程和协程三者之间的区 ...
- hashmap是线程安全的吗?怎么解决?_解决SimpleDateFormat线程安全问题
SimpleDateFormat是线程不安全的类,一般不要定义为static变量,如果定义为static,必须通过加锁等方式保证线程安全. 例如下面一段代码,启动10个线程,同时使用一个`Simple ...
- python 线程通信的几种方式_进程间通信和线程间通信的几种方式
进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代 ...
- 为什么线程池里的方法会执行两次_别以为线程池很简单,来回答下这些问题!...
前言 线程池可以说是 Java 进阶必备的知识点了,也是面试中必备的考点,可能不少人看了这篇文章后能对线程池工作原理说上一二,但这还远远不够,如果碰到比较有经验的面试官再继续追问,很可能会被吊打,考虑 ...
- PHP - 版本选择 - 线程安全与非线程安全 - 学习/实践
1.应用场景 主要用于弄清楚为什么会有线程安全与非线程安全的不同语言版本,以及这种情况是不是一直存在, 是否有解决统一的办法吗- 2.学习/操作 1.文档阅读 PHP For Windows: Bin ...
- 应用退出前不让线程切换_用户级线程和内核级线程,你分清楚了吗?
前天晚上有个伙伴私信我说在学进程和线程,问我有没有好的方法和学习教程,刚好我最近也在备相关的课. 班上不少学生学的还是很不错的.拿班上小白和小明的例子吧(艺名哈).小明接受能力很强,小白则稍差些. 关 ...
- 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型
1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...
- 异步同步、阻塞非阻塞、异步回调、线程队列和协程
今天学习了异步同步.阻塞非阻塞.异步回调.线程队列和协程 一.异步同步和阻塞非阻塞 线程的三种状态: 1.就绪 2.运行 3.阻塞 阻塞:遇到了IO操作 代码卡住 无法执行下一行 CPU会切换到 ...
最新文章
- T-SQL查询进阶--基于列的逻辑表达式
- css 加随机数 引用_在CSS中生成随机数
- OpenCV的轮廓查找和填充
- mysql有类似dbms_output.pu_line();_使用MySQL,SQL_MODE有哪些坑,你知道么?
- [转]Socket的阻塞模式和非阻塞模式
- 权限操作-springSecurity快速入门-使用自定义页面
- 计算一个数的二进制中1的个数
- Enterprise search - Build Search dropdown list - cache issue
- [读书笔记] 设计模式与游戏完美开发
- CODEVS 3269 混合背包
- 切图后用ie6浏览时切片间有空隙
- 人到中年,别再挥霍你的“同情心”了
- rgb颜色查询工具_《我的眼睛–图灵识别》第三章:基础:颜色识别
- 3升5升得4升——倒水问题的万能解法(扩展欧几里得算法)
- Berland and the Shortest Paths CodeForces - 1005F(最短路树)
- Android系统是目前最为流行的手机系统之一
- 解决:System.Data.SqlClient.SqlException: 超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)....
- python调用通达信公式_通达信公式-主力雷达Python化
- 非同质化代币(NFT)概述
- 北京君正案例:超能面板PRO采用4英寸IPS超清多彩屏,值不值得买?
热门文章
- 王道机试指南读后总结-3
- java jni编译_从源码编译Android系统的Java类库和JNI动态库的方法
- jdbc数据库配置mysql数据库_JDBC连接MySQL数据库(一)——数据库的基本连接
- 游戏王计算机兽,游戏王星杯卡——迅猛龙,再生圣经,入侵蠕虫,鼹鼠,幽世之血樱...
- python如何输入多行数据合并_关于Python中的合并字典,这些问题必须搞清楚!
- 跨境电商是什么?跨境电商有哪些模式?
- 独立站运营模式怎么选择?
- java filechannel 性能_FileChannel 和 MappedByteBuffer 实现上有什么不同?为什么性能差这么多?...
- 树和森林与二叉树的转换、树和森林的遍历
- Leetcode每日一题:44.wildcard-matching(通配符匹配)