using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms; namespace 线程和跨线程
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 单线程直接假死了
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAlone_Click(object sender, EventArgs e)
{
for (int i = ; i < ; i++)
{
//通过[调试]-[窗口]-[输出]显示打印值
Console.WriteLine(i);
}
} /// <summary>
/// 新线程运行,窗体不假死
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNew_Click(object sender, EventArgs e)
{
Thread th = new Thread(ShowCalculator)
{
IsBackground = true
};
th.Start(); }
/// <summary>
/// 循环计算方法,供新线程使用
/// </summary>
private void ShowCalculator()
{
for (int i = ; i < ; i++)
{//通过[调试]-[窗口]-[输出]显示打印值
Console.WriteLine(i);
}
}
/// <summary>
/// 带参数的
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnParameters_Click(object sender, EventArgs e)
{
List<int> list = new List<int>() { , , , , };
ParameterizedThreadStart parThreadStart = new ParameterizedThreadStart(ShowParameters);
Thread th = new Thread(parThreadStart) { IsBackground = true };
th.Start(list);
}
private void ShowParameters(object obj)
{
//线程中的参数只能是Object
List<int> result = obj as List<int>;
foreach (var item in result)
{
MessageBox.Show(item.ToString());
}
}
/// <summary>
/// 跨线程访问
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(ShowMulti) { IsBackground = true };
th.Start();
}
/// <summary>
/// 解决跨线程访问报异常,不使用关闭跨线程检查
/// </summary>
private void ShowMulti()
{
int first = ;
for (int i = ; i < ; i++)
{
first = i;
}
//是否要对lbl控件进行跨线程
if (this.lblShow.InvokeRequired)
{
//对委托中的数据类型验证
this.lblShow.Invoke(new Action<Label, string>(ShowLableValue), this.lblShow, first.ToString());
}
else
{
this.lblShow.Text = first.ToString();
}
}
/// <summary>
/// 把值写到控件中
/// </summary>
/// <param name="lbl"></param>
/// <param name="value"></param>
private void ShowLableValue(Label lbl, string value)
{
lbl.Text = value;
} private void Form1_Load(object sender, EventArgs e)
{
//关闭跨进程检查
//Label.CheckForIllegalCrossThreadCalls = false;
//改用委托方法实现
}
}
}

c#基础,单线程,跨线程访问和线程带参数的更多相关文章

  1. ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成

    ASP.NET Boilerplate 学习   1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...

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

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

  3. 如何跨线程访问Winform中的UI元素

    如何跨线程访问Winform中的UI元素 假如制作一个Socket聊天应用程序,很可能会用到多线程: 例如为Receive方法开辟单独一个线程,例如为Receive方法开辟单独一个线程(后台运行的线程 ...

  4. C# WinForm 跨线程访问控件

    问题出现: 在WinForm 处理多线程访问主线程的控件时候,就会出现如图所示的错误对话框:    解决方案:  方案一:去掉线程访问主线程UI控件的安全检查,使用: Control.CheckFor ...

  5. 2019-10-12-win10-uwp-非ui线程访问-ui-

    title author date CreateTime categories win10 uwp 非ui线程访问 ui lindexi 2019-10-12 15:0:12 +0800 2018-2 ...

  6. 线程概念( 线程的特点,进程与线程的关系, 线程和python理论知识,线程的创建)

    参考博客: https://www.cnblogs.com/xiao987334176/p/9041318.html 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运 ...

  7. python 全栈开发,Day41(线程概念,线程的特点,进程和线程的关系,线程和python 理论知识,线程的创建)

    昨日内容回顾 队列 队列 : 先进先出.数据进程安全 队列实现方式: 管道 + 锁 生产者消费者模型 : 解决数据供需不平衡 管道 双向通信 数据进程不安全 EOFError: 管道是由操作系统进行引 ...

  8. python全栈开发,Day41(线程概念,线程的特点,进程和线程的关系,线程和python理论知识,线程的创建)

    昨日内容回顾 队列 队列:先进先出.数据进程安全 队列实现方式:管道+锁 生产者消费者模型:解决数据供需不平衡 管道 双向通信,数据进程不安全 EOFError: 管道是由操作系统进行引用计数的 必须 ...

  9. 跨线程访问UI控件时的Lambda表达式

    工作中经常会用到跨线程访问UI控件的情况,由于.net本身机制,是不允许在非UI线程访问UI控件的,实际上跨线程访问UI控件还是 将访问UI的操作交给UI线程来处理的, 利用Control.Invok ...

随机推荐

  1. JS与IOS、Android的交互

    一.JS与Android 放在了assets文件夹下了(注意若使用的是AS这个IDE,assets文件夹应放在src/main目录下) <!DOCTYPE html> <html&g ...

  2. [LeetCode] Longest Mountain in Array 数组中最长的山

    Let's call any (contiguous) subarray B (of A) a mountain if the following properties hold: B.length ...

  3. Flutter 编写内联文本

    使用Text.rich或者RichText ListView( children: <Widget>[ Text.rich( TextSpan( text: 'Text: ', child ...

  4. PHP 5.x和PHP 7 Closure不同行为问题

    同样一段闭包代码,PHP 7 ok的,PHP 5.5.11(Windows 开发机器)上却报错,以为是PHP 5 bug,原来是用法不对,记录一下~ 原代码(自己写的框架的路由部分)最初是这样写的: ...

  5. mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复

    1.索引: 索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容. 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进 ...

  6. 性能测试学习 第八课--LR12中针对WebServices协议的三种脚本开发模式

    一,webservices协议简介 webservices是建立可交互操作的分布式应用程序的新平台,它通过一系列的标准和协议来保证程序之间的动态连接, 其中最基本的协议包括soap,wsdl,uddi ...

  7. IIS中 flv、swf 文件无法播放

    解决方案: 1.服务器安装flash,这是必须的. 2.MIME类型添加两个:名称.swf,值application/x-shockwave-flash:名称.flv,值flv-application ...

  8. C 基于数组存储的堆栈实现

    一.堆栈简介 对于需要管理的队列,主要操作是在序列的末尾插入和取出(删除)元素,有这样操作要求的序列我们称之为堆栈(Stack). 堆栈可以认为是具有一定约束的线性表,插入和删除都作用在一个称为栈顶( ...

  9. [Swift]LeetCode991. 坏了的计算器 | Broken Calculator

    On a broken calculator that has a number showing on its display, we can perform two operations: Doub ...

  10. Kubernetes因限制内存配置引发的错误

    今天对一个pod进行内存资源调整后, 一直卡在ContainerCreating的状态, 执行describe命令查看该 Pod 详细信息后发现如下 . [root@master-01 ~]# kub ...