c#基础,单线程,跨线程访问和线程带参数
1 using System; 2 using System.Collections.Generic; 3 using System.Threading; 4 using System.Windows.Forms; 5 6 namespace 线程和跨线程 7 { 8 public partial class Form1 : Form 9 { 10 public Form1() 11 { 12 InitializeComponent(); 13 } 14 /// <summary> 15 /// 单线程直接假死了 16 /// </summary> 17 /// <param name="sender"></param> 18 /// <param name="e"></param> 19 private void btnAlone_Click(object sender, EventArgs e) 20 { 21 for (int i = 0; i < 100000; i++) 22 { 23 //通过[调试]-[窗口]-[输出]显示打印值 24 Console.WriteLine(i); 25 } 26 } 27 28 29 /// <summary> 30 /// 新线程运行,窗体不假死 31 /// </summary> 32 /// <param name="sender"></param> 33 /// <param name="e"></param> 34 private void btnNew_Click(object sender, EventArgs e) 35 { 36 Thread th = new Thread(ShowCalculator) 37 { 38 IsBackground = true 39 }; 40 th.Start(); 41 42 } 43 /// <summary> 44 /// 循环计算方法,供新线程使用 45 /// </summary> 46 private void ShowCalculator() 47 { 48 for (int i = 0; i < 100000; i++) 49 {//通过[调试]-[窗口]-[输出]显示打印值 50 Console.WriteLine(i); 51 } 52 } 53 /// <summary> 54 /// 带参数的 55 /// </summary> 56 /// <param name="sender"></param> 57 /// <param name="e"></param> 58 private void btnParameters_Click(object sender, EventArgs e) 59 { 60 List<int> list = new List<int>() { 1, 2, 3, 4, 5 }; 61 ParameterizedThreadStart parThreadStart = new ParameterizedThreadStart(ShowParameters); 62 Thread th = new Thread(parThreadStart) { IsBackground = true }; 63 th.Start(list); 64 } 65 private void ShowParameters(object obj) 66 { 67 //线程中的参数只能是Object 68 List<int> result = obj as List<int>; 69 foreach (var item in result) 70 { 71 MessageBox.Show(item.ToString()); 72 } 73 } 74 /// <summary> 75 /// 跨线程访问 76 /// </summary> 77 /// <param name="sender"></param> 78 /// <param name="e"></param> 79 private void button1_Click(object sender, EventArgs e) 80 { 81 Thread th = new Thread(ShowMulti) { IsBackground = true }; 82 th.Start(); 83 } 84 /// <summary> 85 /// 解决跨线程访问报异常,不使用关闭跨线程检查 86 /// </summary> 87 private void ShowMulti() 88 { 89 int first = 0; 90 for (int i = 0; i < 10; i++) 91 { 92 first = i; 93 } 94 //是否要对lbl控件进行跨线程 95 if (this.lblShow.InvokeRequired) 96 { 97 //对委托中的数据类型验证 98 this.lblShow.Invoke(new Action<Label, string>(ShowLableValue), this.lblShow, first.ToString()); 99 } 100 else 101 { 102 this.lblShow.Text = first.ToString(); 103 } 104 } 105 /// <summary> 106 /// 把值写到控件中 107 /// </summary> 108 /// <param name="lbl"></param> 109 /// <param name="value"></param> 110 private void ShowLableValue(Label lbl, string value) 111 { 112 lbl.Text = value; 113 } 114 115 private void Form1_Load(object sender, EventArgs e) 116 { 117 //关闭跨进程检查 118 //Label.CheckForIllegalCrossThreadCalls = false; 119 //改用委托方法实现 120 } 121 } 122 }
转载于:https://www.cnblogs.com/sighful/p/8981007.html
c#基础,单线程,跨线程访问和线程带参数相关推荐
- C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它...
C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件"Form1"的线程访问它 网上的代码都比较复杂,还是这个简单 见代码, 简易解决办法: 主窗体代码 usin ...
- 线程间操作无效: 从不是创建控件的线程访问它。
private void button1_Click(object sender, EventArgs e){//报错:从不是创建控件的线程访问它Thread t = new Thread(() =& ...
- android 组件 线程,Android UI线程和非UI线程
UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程(main thread). 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,你的应用和Android的 ...
- C# 学习笔记(8) 控件的跨线程访问
C# 学习笔记(8) 控件的跨线程访问 本文参考博客 C#多线程 https://www.cnblogs.com/dotnet261010/p/6159984.html C# 线程与进程 https: ...
- C#【委托/事件篇】跨线程访问窗体控件的方法
文章目录 一.直接调用方法,方法中使用委托[textBox1.InvokeRequired] 二.调用委托,委托进一步关联方法 1.使用委托[最基础的调用方法:委托五步法] 2.使用Action作为委 ...
- InvokeHelper,让跨线程访问/修改主界面控件不再麻烦(转)
http://bbs.csdn.net/topics/390162519 事实上,本文内容很简单且浅显,所以取消前戏,直接开始.. 源代码:在本文最后 这里是一张动画,演示在多线程(无限循环+Thre ...
- java 线程访问控件_C#多线程与跨线程访问界面控件的方法
本文实例讲述了C#多线程与跨线程访问界面控件的方法.分享给大家供大家参考.具体分析如下: 在编写WinForm访问WebService时,常会遇到因为网络延迟造成界面卡死的现象.启用新线程去访问Web ...
- 跨线程操作无效:从创建该线程的线程以外的线程访问控件
我有一个场景. (Windows窗体,C#.. NET) 有一个主窗体可以承载一些用户控件. 用户控件执行一些繁重的数据操作,因此,如果我直接调用UserControl_Load方法,则UI在加载方法 ...
- C# WinForm跨线程访问UI控件
C# 跨线程访问控件 在做WinForm时,在UI线程之外调用控件会报异常:System.InvalidOperationException:"线程间操作无效: 从不是创建控件"l ...
最新文章
- MyBatis第二天
- RocketMQ的核心概念讲解
- JavaScript实现省市二级联动
- python mp4 切片_FFmpeg MP4视频切片成TS m3u8播放 好文收集
- java函数void返回值是,Java中main()函数的返回值是什么( )。A、StringB、intC、c......
- sql查询条件为空的另类写法o( ̄▽ ̄)d
- VMware 披露严重0day,影响Workspace One 的多个组件
- 爬虫—使用Requests
- 应用:邮件地址手机安装
- YYKit源码学习——YYMemoryCache
- 捷联式惯导系统初始对准
- opencv 场景文字识别
- GDOI2018滚粗记
- 泰坦尼克号乘客获救预测
- 什么是微内核,看这一篇就够了
- 估算下北京有多少个加油站?
- IDEA learn 快捷键使用记录 --自用
- uni-app 上下滑动左右滑动
- linux 脚本实现物理备份,shell脚本实现系统监视统计与数据备份
- C#使用iTextSharp将数据导出成PDF
热门文章
- 【收藏】为什么在Scala中可以在运行时将AnyVal转换为AnyRef?AnyVal转换为AnyRef
- CICD流程设计及openshift与k8s的命令对比
- presto安装及可视化webui安装、配置
- Python3文件操作:with...open的使用代码示例
- Python爬虫开发:Request的使用(随机User-Agent)
- PLSQL登录时,“ORA-12514:监听程序当前无法识别连接描述符中请求的服务” 错误解决
- scala调用java代码_scala调用java代码
- centos安装android应用程序,centos7软件安装系列【二十一】安装android打包环境
- Python 列表拷贝
- 彻底掌握Linux文件与目录管理命令?进来看看硬核总结