c#基础,单线程,跨线程访问和线程带参数
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#基础,单线程,跨线程访问和线程带参数的更多相关文章
- 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.解压后打开解决方案,解决方案目录: ...
- C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它
C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它 网上的代码都比较复杂,还是这个简单 见代码, 简易解决办法: 主窗体代码 using System; ...
- 如何跨线程访问Winform中的UI元素
如何跨线程访问Winform中的UI元素 假如制作一个Socket聊天应用程序,很可能会用到多线程: 例如为Receive方法开辟单独一个线程,例如为Receive方法开辟单独一个线程(后台运行的线程 ...
- C# WinForm 跨线程访问控件
问题出现: 在WinForm 处理多线程访问主线程的控件时候,就会出现如图所示的错误对话框: 解决方案: 方案一:去掉线程访问主线程UI控件的安全检查,使用: Control.CheckFor ...
- 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 ...
- 线程概念( 线程的特点,进程与线程的关系, 线程和python理论知识,线程的创建)
参考博客: https://www.cnblogs.com/xiao987334176/p/9041318.html 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运 ...
- python 全栈开发,Day41(线程概念,线程的特点,进程和线程的关系,线程和python 理论知识,线程的创建)
昨日内容回顾 队列 队列 : 先进先出.数据进程安全 队列实现方式: 管道 + 锁 生产者消费者模型 : 解决数据供需不平衡 管道 双向通信 数据进程不安全 EOFError: 管道是由操作系统进行引 ...
- python全栈开发,Day41(线程概念,线程的特点,进程和线程的关系,线程和python理论知识,线程的创建)
昨日内容回顾 队列 队列:先进先出.数据进程安全 队列实现方式:管道+锁 生产者消费者模型:解决数据供需不平衡 管道 双向通信,数据进程不安全 EOFError: 管道是由操作系统进行引用计数的 必须 ...
- 跨线程访问UI控件时的Lambda表达式
工作中经常会用到跨线程访问UI控件的情况,由于.net本身机制,是不允许在非UI线程访问UI控件的,实际上跨线程访问UI控件还是 将访问UI的操作交给UI线程来处理的, 利用Control.Invok ...
随机推荐
- 201771010118 马昕璐《面向对象程序设计java》第十周学习总结
第一部分:理论知识学习部分 泛型:也称参数化类型(parameterized type)就是在定义类.接口和方法时,通过类型参数 指示将要处理的对象类型. 泛型程序设计(Generic program ...
- Oracle报错ORA-12516 TNS:listener could not find available handler with matching protocol stack
解决办法定位原因-- 以sysdba身份登陆PL/SQL sqlplus / as sysdba;-- 查看当前连接进程数SQL>select count(*) from v$process;- ...
- 手动安装composer详细教学
1.下载compser.phar 地址 https://getcomposer.org/download/ 2.新建composer.bat 文件,写入“@php "%~dp0compose ...
- NFS部署文件共享
本章解了如何配置网络文件系统(Network File System,NFS)服务来简化Linux系统之间的文件共享工作,以及通过部署NFS服务在多台Linux系统之间挂载并使用资源.在管理设备挂载信 ...
- Pycharm画五角星
import turtle turtle.setup(600,400,0,0) turtle.bgcolor('red') turtle.color('yellow') turtle.fillcolo ...
- URL跳转与webview安全浅谈
URL跳转与webview安全浅谈 我博客的两篇文章拼接在一起所以可能看起来有些乱 起因 在一次测试中我用burpsuite搜索了关键词url找到了某处url我测试了一下发现waf拦截了指向外域的请求 ...
- CSS怎么在项目里引入自定义字体(@font-face)
前言: 以前我一直用内置的默认字体给文字设置字体,直到一天UI妹纸给了我下面的字体 当时我是蒙蔽的,这个字体的效果如下 默认字体并无该字体,直接设置是没有效果的,这时就需要用到自定义字体了 下面 ...
- [Swift]LeetCode30. 与所有单词相关联的字串 | Substring with Concatenation of All Words
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
- [Swift]LeetCode103. 二叉树的锯齿形层次遍历 | Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- pytthon—day8 读写模式的结合、文件操作模式、with完成文本文件复制、游标操作
一.读写模式的结合 w:写指没有新建文件,有文件就清空 w=open('1.txt','w',encoding='utf-8') w.write('000\n') 在写入数据时,需要及时处理内存空间, ...