C#中创建线程,创建带参数的线程

线程操作主要用到Thread类,他是定义在System.Threading.dll下。使用时需要添加这一个引用。该类提供给我们四个重载的构造函

构造函数定义:

无参数委托

[SecuritySafeCritical]
public Thread(ThreadStart start);
[SecuritySafeCritical]
public Thread(ThreadStart start, int maxStackSize);

有一个参数object委托

[SecuritySafeCritical]
public Thread(ParameterizedThreadStart start);
[SecuritySafeCritical]
public Thread(ParameterizedThreadStart start, int maxStackSize);
// maxStackSize:
// 线程要使用的最大堆栈大小(以字节为单位);如果为 0 则使用可执行文件的文件头中指定的默认最大堆栈大小。重要地,对于部分受信任的代码,如果 maxStackSize
// 大于默认堆栈大小,则将其忽略。不引发异常。

一、创建没有参数传入线程

//创建没有参数的线程
Thread thread = new Thread(new ThreadStart(ThreadMethod));
//或者
//Thread thread = new Thread(ThreadMethod);
thread.Start();
Console.WriteLine("代码执行完成");
//线程方法定义
public static void ThreadMethod()
{
    Console.WriteLine("当前线程ID:{0},当前线程名称:{1}",
        Thread.CurrentThread.ManagedThreadId,
        Thread.CurrentThread.Name);
    while (true)
    {
        Console.WriteLine(DateTime.Now);
        Thread.Sleep(1000);
    }
}

二、创建一个参数传入object类型的线程

public static void Init()
{
    //创建一个参数的线程
    //ParameterizedThreadStart 指定传入的类型是object
    for (int i = 0; i < 3; i++)
    {
        Thread thread = new Thread(new ParameterizedThreadStart(ThreadMethod));
        object obj = i * 10;
        thread.Start(obj);
    }
}
//定义线程方法
public static void ThreadMethod(object number)
{
    int i = (int)number;
    while (true)
    {
        i++;
        Console.WriteLine("当前线程ID:{0},number={1}", Thread.CurrentThread.ManagedThreadId, i);
        Thread.Sleep(2000);
    }
}

三、创建使用对象实例方法,创建多个参数传入情况的线程

public static void Init()
{
    //创建多个传入参数的线程
    for (int i = 1; i < 4; i++)
    {
        Calculator cal = new Calculator(i, i * 100);
        Thread thread = new Thread(new ThreadStart(cal.Add));
        thread.Start();
    }
}
public class Calculator
{
    public int X { get; set; }
    public int Y { get; set; }
    public Calculator(int x, int y)
    {
        this.X = x;
        this.Y = y;
    }
    //定义线程执行方法
    public void Add()
    {
        int i = 0;
        while (i < 2)
        {
            i++;
            Console.WriteLine("当前线程ID:{0},{1}+{2}={3}", Thread.CurrentThread.ManagedThreadId, X, Y, X + Y);
            Thread.Sleep(1000);
        }
    }
}

时间: 2024-10-29 19:10:12

C#中创建线程,创建带参数的线程的相关文章

Java带参数的线程类ParameterizedThread——即如何给Thread传递参数

在Java中似乎没有提供带运行参数的线程实现类,在第三方类库中也没有找到.网上有大量的文章在讨论这个问题,但都没有提供很好的代码封装解决方案,这令我很吃惊.如果读者知道有官方或者第三方的实现方式,欢迎留言说明.本文最后给出了一种实现带运行参数的线程实现类. 在C#的基础类库中早就提供了相关的解决方案,如下是C#提供的带参数的子线程创建方法: Thread th = new Thread((param) => { Console.WriteLine(param); }); th.Start(i);

线程启动带参数

public void StartThread() { Thread TempThread = new Thread(new ThreadStart(Start)); TempThread.Start(); } 带参数的: public void StartThread() { Thread TempThread = new Thread(new ParameterizedThreadStart(Start)); TempThread.Start(); } public void Start(o

Net线程足迹 传递参数至线程

方法一:应用ParameterizedThreadStart这个委托来传递输入参数,这种方法适用于传递单个参数的情况. [c-sharp] view plaincopy using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using Sys

C#创建带参数的线程

1.无参数线程的创建 Thread thread = new Thread(new ThreadStart(ShowMessage)); thread.Start(); private void ShowMessage() { Console.WriteLine("hello world"); } 2.带一个参数的线程 使用ParameterizedThreadStart,调用 System.Threading.Thread.Start(System.Object) 重载方法时将包含数

调用带参数的线程两种方法

第一种,用无参方法调用代参方法,用线程调用无参方法 第二种,如代码: //带参数的方法 ParameterizedThreadStart pt = new ParameterizedThreadStart(LoadGridView); //加入到线程 Thread thread = new Thread(pt); //允许后台执行 thread.IsBackground = true; //传入参数 thread.Start(""); 有参函数的参数要是object类型例如: priv

用线程执行带参数的方法

最近的项目用到了线程,在线程里面需要执行带有参数的方法.之前在百度里面也查到了好多方法,今天想把自己在网上查询结果和自己的应用情况做一个记录,方便后续用到时候查看. 具体需求是这样的:有一个开锁的动作,这个锁所在的PLC地址位需要保持1的状态(开锁状态)维持15秒,然后从1——>0. 我还是个小菜鸟,有写的不对的地方,还请大侠们多多指教. private void btn_OpenLeftLock_Click(object sender, RoutedEventArgs e) { try { T

Struts2中,action配置文件中两个action带参数的调用

当一个action调用另一个action,并且要传递一个参数过去时,这是可以这样写: 1 <action name="addMsg" class="action.MessageAction" method="addMsg"> 2 <result type="redirect">getNewsById.action?id=${id}&</result> 3 </action>

java中为什么一些方法带参数

一个很有趣的例子: 比如工厂要造一辆车,需要先设计图纸,然后技工师傅拿到图纸,就要设计,我需要一个椅子,一个方向盘,一块底盘.再然后,仓库就把这些东西给技工师傅,最后车组装完成.1.设计图纸就是需求分析,就是脑子里的思路:这个方法要有什么样的功能?要做些什么事.2.技工师傅需要方向盘.底盘.椅子,就是参数!需要这几样才能把汽车做出来,同理,需要这几个参数这个方法才能完成!这样的参数叫形参,只是一个形式,确定参数的类型!比如要椭圆形的底盘,正方形的轮胎……确定之后,就只能按照既定的类型传递参数,否

线程调用带参数的方法

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Text;using System.Threading;using System.Threading.Tasks; namespace t{ /// <summary> /// get访问判断状态码 /// </summary> public class Filte