C#往线程里传递参数的方法小结

 更新时间:2016年07月27日 10:43:56   作者:瓦里奥  
这篇文章主要介绍了C#往线程里传参数的方法小结的相关资料,还给大家简单说明下传参的两种方式,非常不错,具有参考借鉴价值,需要的朋友可以参考下

传参方式有两种:

1、创建带参构造方法类 传参

2、利用Thread.start(8)直接传参,该方法会接收一个对象,并将该对象传递给线程,因此在线程中启动的方法

必须接收object类型的单个参数。

Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。

Thread (ThreadStart) 初始化 Thread 类的新实例。

由 .NET Compact Framework 支持。

Thread (ParameterizedThreadStart, Int32) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。

Thread (ThreadStart, Int32) 初始化 Thread 类的新实例,指定线程的最大堆栈大小。

由 .NET Compact Framework 支持。

我们如果定义不带参数的线程,可以用ThreadStart,带一个参数的用ParameterizedThreadStart。带多个参数的用另外的方法,下面逐一讲述。

一、不带参数的

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 
namespace AAAAAA 
{ 
class AAA 
{ 
public static void Main() 
{ 
Thread t = new Thread(new ThreadStart(A)); 
t.Start(); 
Console.Read(); 
} 
private static void A() 
{ 
Console.WriteLine("Method A!"); 
} 
} 
} 

结果显示Method A!

二、带一个参数的

由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法B形参类型必须为object。

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 
namespace AAAAAA 
{ 
class AAA 
{ 
public static void Main() 
{ 
Thread t = new Thread(new ParameterizedThreadStart(B)); 
t.Start("B"); 
Console.Read(); 
} 
private static void B(object obj) 
{ 
Console.WriteLine("Method {0}!",obj.ToString ()); 
} 
} 
} 

结果显示Method B!

三、带多个参数的

由于Thread默认只提供了这两种构造函数,如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类的对象时候实例化这个属性,然后进行操作。

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 
namespace AAAAAA 
{ 
class AAA 
{ 
public static void Main() 
{ 
My m = new My(); 
m.x = 2; 
m.y = 3; 
Thread t = new Thread(new ThreadStart(m.C)); 
t.Start(); 
Console.Read(); 
} 
} 
class My 
{ 
public int x, y; 
public void C() 
{ 
Console.WriteLine("x={0},y={1}", this.x, this.y); 
} 
} 
} 

结果显示x=2,y=3

四、利用结构体给参数传值。

定义公用的public struct,里面可以定义自己需要的参数,然后在需要添加线程的时候,可以定义结构体的实例。

//结构体 
struct RowCol 
{ 
public int row; 
public int col; 
}; 
//定义方法 
public void Output(Object rc) 
{ 
RowCol rowCol = (RowCol)rc; 
for (int i = 0; i < rowCol.row; i++) 
{ 
for (int j = 0; j < rowCol.col; j++) 
Console.Write("{0} ", _char); 
Console.Write("\n"); 
} 
} 

以上所述是小编给大家介绍的C#往线程里传递参数的方法小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • C#自定读取配置文件类实例

    C#自定读取配置文件类实例

    这篇文章主要介绍了C#自定读取配置文件类,实例分析了C#读取配置文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • WinForm中实现picturebox自适应图片大小的方法

    WinForm中实现picturebox自适应图片大小的方法

    这篇文章主要介绍了WinForm中实现picturebox自适应图片大小的方法,涉及pictureBox控件相关属性设置技巧,需要的朋友可以参考下
    2017-05-05
  • 一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)

    一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)

    下面小编就为大家带来一篇一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • C#中的正则表达式双引号问题

    C#中的正则表达式双引号问题

    正则表达式获取CSS里面的图片的例子,里面有URL里面的图片地址有双引号,要注意用两个双引号表示
    2015-05-05
  • C#实现rar压缩与解压缩文件的方法

    C#实现rar压缩与解压缩文件的方法

    这篇文章主要介绍了C#实现rar压缩与解压缩文件的方法,实例分析了C#利用winrar程序实现文件的压缩与解压缩的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C#连接Oracle数据库字符串(引入DLL)的方式

    C#连接Oracle数据库字符串(引入DLL)的方式

    这篇文章主要给大家介绍了关于C#连接Oracle数据库字符串(引入DLL)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Unity3D移动端实现摇一摇功能

    Unity3D移动端实现摇一摇功能

    这篇文章主要为大家详细介绍了基于Unity3D移动端实现摇一摇功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • C#使用itextsharp生成PDF文件的实现代码

    C#使用itextsharp生成PDF文件的实现代码

    以下是对在C#中使用itextsharp生成PDF文件的实现代码进行了详细分析介绍,需要的朋友可以过来参考下
    2013-07-07
  • c# winform读取xml文件创建菜单的代码

    c# winform读取xml文件创建菜单的代码

    动态创建菜单使得程序灵活性大大增加,本文根据读取xml文件中的配置菜单项来动态创建菜单,代码如下
    2013-09-09
  • 关于c#中枚举类型支持显示中文的扩展说明

    关于c#中枚举类型支持显示中文的扩展说明

    需求 : 枚举类型在界面显示的时候可以显示相应的中文信息, 这样界面对用户友好 . 场景 : 在一些业务中涉及到审核功能的时候, 往往有这几个状态 :未送审 , 审核中 ,审核通过, 驳回 . 这个时候我们会定义一个枚举类型来描述 :
    2013-03-03

最新评论