我有一个方法,是带有参数的,我想用多线程,但是多线程只能用方法名字,不能用参数,哪位老大能告诉我怎么使多线程可以带参数啊?
解决方案 »
- 安装windows服务,写一个bat,双击执行安装。但是安装不成功,请教是什么原因。
- Winform拖控件(没写代码)。XP下正常,WIN7下异常
- 在复制内存时检测到可能的 I/O 争用条件。默认情况下,I/O 包不是线程安全的。。。。
- webrequest 出错:服务器提交了协议冲突. Section=ResponseStatusLine 错误异常!
- 上传超过maxRequestLength大小的文件时,提示找到到服务器无法显示网页。另:如何显示上传进度?
- 请给为高手帮帮忙!
- C#中多窗体之间的数据传递,急!!!!!!!!!!
- 在ASP.NET中调用REMOTING会出错,WINDOWFORM就不会,为什么,是安全问题吗??请进
- 如何让下拉框中显示某一列的全部内容?
- 二进制序列化(BinaryFormatter)一个类到远程进程的问题
- 最多输入5个汉字的正则表达式
- 关于范型使用的简单问题
class Program
{
static void Main(string[] args)
{
ParameterizedThreadStart pts = new ParameterizedThreadStart(Show);
Thread t = new Thread(pts);
t.Start("Hello!How are you!");
} private static void Show(object a)
{
while (true)
{
Console.WriteLine(a);
}
}
}创建一个线程的时候需要给一个委托或者方法名,其中有一个是可以带参数的委托。
这样创建之后在启动的时候需要传递一个object的参数,具体使用如上面的代码。
可能你要问那我要想传两个参数怎么办呢?很容易,因为传的object类型,那么我们可以定义一个类,这个类里面定义我们要传的参数就可以了,这也体现了C#和Java的一大优势,就是封装。
或者通过构造函数先传递好参数,然后在启动线程方法
{
public string 用户名{get;set;}
public string 用户地址{get;set;}
public decimal 用户存款{get;set;} private void Show()
{
Console.WriteLine(this.用户名);
}
}
而调用方就可以写:var p1 = new ShowThread { 用户名 = "s1", 用户存款 = 100 };
new Thread(p1.Show).Start();
var p2 = new ShowThread { 用户名 = "张三", 用户存款 = 800 };
new Thread(p2.Show).Start();
Console.ReadKey();多运行几遍试试看,你会看到打印两个用户名的代码执行次序是随机的。
new Thread(() =>
{
Console.WriteLine("张三");
var x = 1;
Console.WriteLine(x + y); //这里直接引用外边的变量
}).Start();这样更爽。