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#基础,单线程,跨线程访问和线程带参数相关推荐

  1. C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它...

    C# 委托 / 跨线程访问UI /  线程间操作无效: 从不是创建控件"Form1"的线程访问它 网上的代码都比较复杂,还是这个简单 见代码, 简易解决办法: 主窗体代码 usin ...

  2. 线程间操作无效: 从不是创建控件的线程访问它。

    private void button1_Click(object sender, EventArgs e){//报错:从不是创建控件的线程访问它Thread t = new Thread(() =& ...

  3. android 组件 线程,Android UI线程和非UI线程

    UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程(main thread). 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,你的应用和Android的 ...

  4. C# 学习笔记(8) 控件的跨线程访问

    C# 学习笔记(8) 控件的跨线程访问 本文参考博客 C#多线程 https://www.cnblogs.com/dotnet261010/p/6159984.html C# 线程与进程 https: ...

  5. C#【委托/事件篇】跨线程访问窗体控件的方法

    文章目录 一.直接调用方法,方法中使用委托[textBox1.InvokeRequired] 二.调用委托,委托进一步关联方法 1.使用委托[最基础的调用方法:委托五步法] 2.使用Action作为委 ...

  6. InvokeHelper,让跨线程访问/修改主界面控件不再麻烦(转)

    http://bbs.csdn.net/topics/390162519 事实上,本文内容很简单且浅显,所以取消前戏,直接开始.. 源代码:在本文最后 这里是一张动画,演示在多线程(无限循环+Thre ...

  7. java 线程访问控件_C#多线程与跨线程访问界面控件的方法

    本文实例讲述了C#多线程与跨线程访问界面控件的方法.分享给大家供大家参考.具体分析如下: 在编写WinForm访问WebService时,常会遇到因为网络延迟造成界面卡死的现象.启用新线程去访问Web ...

  8. 跨线程操作无效:从创建该线程的线程以外的线程访问控件

    我有一个场景. (Windows窗体,C#.. NET) 有一个主窗体可以承载一些用户控件. 用户控件执行一些繁重的数据操作,因此,如果我直接调用UserControl_Load方法,则UI在加载方法 ...

  9. C# WinForm跨线程访问UI控件

    C# 跨线程访问控件 在做WinForm时,在UI线程之外调用控件会报异常:System.InvalidOperationException:"线程间操作无效: 从不是创建控件"l ...

最新文章

  1. MyBatis第二天
  2. RocketMQ的核心概念讲解
  3. JavaScript实现省市二级联动
  4. python mp4 切片_FFmpeg MP4视频切片成TS m3u8播放 好文收集
  5. java函数void返回值是,Java中main()函数的返回值是什么( )。A、StringB、intC、c......
  6. sql查询条件为空的另类写法o( ̄▽ ̄)d
  7. VMware 披露严重0day,影响Workspace One 的多个组件
  8. 爬虫—使用Requests
  9. 应用:邮件地址手机安装
  10. YYKit源码学习——YYMemoryCache
  11. 捷联式惯导系统初始对准
  12. opencv 场景文字识别
  13. GDOI2018滚粗记
  14. 泰坦尼克号乘客获救预测
  15. 什么是微内核,看这一篇就够了
  16. 估算下北京有多少个加油站?
  17. IDEA learn 快捷键使用记录 --自用
  18. uni-app 上下滑动左右滑动
  19. linux 脚本实现物理备份,shell脚本实现系统监视统计与数据备份
  20. C#使用iTextSharp将数据导出成PDF

热门文章

  1. 【收藏】为什么在Scala中可以在运行时将AnyVal转换为AnyRef?AnyVal转换为AnyRef
  2. CICD流程设计及openshift与k8s的命令对比
  3. presto安装及可视化webui安装、配置
  4. Python3文件操作:with...open的使用代码示例
  5. Python爬虫开发:Request的使用(随机User-Agent)
  6. PLSQL登录时,“ORA-12514:监听程序当前无法识别连接描述符中请求的服务” 错误解决
  7. scala调用java代码_scala调用java代码
  8. centos安装android应用程序,centos7软件安装系列【二十一】安装android打包环境
  9. Python 列表拷贝
  10. 彻底掌握Linux文件与目录管理命令?进来看看硬核总结