C# 线程传参
传参方式有两种:
1、创建带参构造方法类 传参
2、利用Thread.start(8)直接传参,该方法会接收一个对象,并将该对象传递给线程,因此在线程中启动的方法
必须接收object类型的单个参数。
3、闭包传参 该方法使用lambda表达式。
3.1 lambda表达式中使用任何局部变量时 ,C# 会自动生成一个类,并将该变量作为该类的一个属性。实际上与第一种方式基本一样,但是我们无需定义类,C#会自动编译实现该类。
3.2 使用lambda表达式会导致一些问题,如使用多个lambda表达式中使用相同的变量,他们会共享该变量值
using System;
using System.Threading; namespace testThread_Transferparameters
{
class Program
{
static void Main(string[] args)
{ //
var sample = new ThreadSample();
var threadone = new Thread(sample.CountNumbers);
threadone.Name = "ThreadOne";
threadone.Start();
threadone.Join();
Console.WriteLine("------------------"); //
var threadtwo = new Thread(count);
threadtwo.Name = "threadtwo";
threadtwo.Start();
threadtwo.Join();
Console.WriteLine("------------------"); //
var threadthree = new Thread(() => CountNumbers());
threadthree.Name = "threadthree";
threadthree.Start();
threadthree.Join();
Console.WriteLine("------------------"); int i = ;
var threadfour = new Thread(() => PrintNumber(i));
i = ;
var threadfive = new Thread(() => PrintNumber(i));
threadfour.Start();
threadfive.Start();
}
static void count(object iterations)
{
CountNumbers((int)iterations);
}
static void CountNumbers(int iterations)
{
for (int i = ; i <= iterations; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(0.5));
Console.WriteLine("{0} prints {1}", Thread.CurrentThread.Name, i);
}
}
static void PrintNumber(int number)
{
Console.WriteLine(number);
}
} class ThreadSample
{
private readonly int _iterations;
public ThreadSample(int iterations)
{
_iterations = iterations;
}
public void CountNumbers()
{
for (int i = ; i <= _iterations; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(0.5));
Console.WriteLine("{0} prints {1}", Thread.CurrentThread.Name, i);
}
}
}
}
结果如下:
C# 线程传参的更多相关文章
- C#基础知识回顾--线程传参
C#基础知识回顾--线程传参 在不传递参数情况下,一般大家都使用ThreadStart代理来连接执行函数,ThreadStart委托接收的函数不能有参数, 也不能有返回值.如果希望传递参数给执行函数, ...
- c++11中关于`std::thread`线程传参的思考
关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...
- java 线程传参 方式
第一类:主动向线程传参 public class ThreadTest extends Thread { public ThreadTest() { } /** * 第一种通过构造方法来传递参数 ...
- c++线程传参问题
std::thread可以和任何可调用类型一起工作,可调用对象和函数带有参数时,可以简单地将参数传递给std::thread的构造函数 例如: #include<iostream> #in ...
- python 线程创建和传参(28)
在以前的文章中虽然我们没有介绍过线程这个概念,但是实际上前面所有代码都是线程,只不过是单线程,代码由上而下依次执行或者进入main函数执行,这样的单线程也称为主线程. 有了单线程的话,什么又是多线程? ...
- Jmeter跨线程组传参
我们知道,同一线程组中可以通过“正则表达式提取器”获取其中一个取样器的响应结果中的参数,直接传给线程组中的其他取样器.但其他线程组中的取样器也想使用同样的参数时,无法直接获取.举个例子: 提取“登 ...
- 第24课 std::thread线程类及传参问题
一. std::thread类 (一)thread类摘要及分析 class thread { // class for observing and managing threads public: c ...
- 使用java传参调用exe并且获取程序进度和返回结果的一种方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在某个项目中需要考虑使用java后台调用由C#编写的切图程序( ...
- .NET 内存基础(通过内存体验类型、传参、及装箱拆箱)
该随笔受启发于<CLR Via C#(第三版)>第四章4.4运行时的相互联系 一.内存分配的几个区域 1.线程栈 局部变量的值类型 和 局部变量中引用类型的指针(或称引用)会被分配到该区域 ...
随机推荐
- ghostDoct 使用 (转 http://www.cnblogs.com/RockyMyx/archive/2010/04/20/Project-Route-Using-GhostDoc.html)
一.简介 GhostDoc是Visual Studio的一个免费插件,可以为开发人员自动生成XML格式的注释文档. 二.下载 需要的朋友可以去这里下载,填个Email地址就可以下了:GhostDoc下 ...
- Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana 分块
E. GukiZ and GukiZiana Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55 ...
- 关于THIS_FILE
VC++中本身就有内存泄漏检查的机制,可以在向导生成的支持MFC的工程中看到如下代码: #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE ...
- LINUX CACHE IO THREAD
http://www.penglixun.com/tech/system/linux_cache_discovery.html http://my.oschina.net/HardySimpson/b ...
- oralce 函数 FOR windows 跟踪神器
https://github.com/dennis714 http://www.yurichev.com
- spring security源码分析之一springSecurityFilterChain
1. spring和spring security的集成,配置web.xml如下: <context-param> <param-name>contextConfigLocat ...
- PHP header 的几种用法
跳转页面 header('Location:'.$url); //Location和":"之间无空格. 声明content-type header('content-type:te ...
- excel,access常用公式函数VBA代码汇总文章
批量将CSV导入access alt+f11 打开access的vbe环境 Sub test() Dim SQL As String Dim MyPath As String Dim MyPathDb ...
- myecplise 打开报错 Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project 'myf'. Java.lang.NullPointerException
Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project 'myf'.Java.l ...
- Java SE ---流程控制语句
java的控制流程有三种: 一,顺序流程 自上而下,按照代码的先后顺序执行 二,分支流程 1,if/else语句 2,swit ...