当前位置:
首页 > Python基础教程 >
-
C#教程之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 }
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式