我有一个方法,是带有参数的,我想用多线程,但是多线程只能用方法名字,不能用参数,哪位老大能告诉我怎么使多线程可以带参数啊?
解决方案 »
- 高手来看看,求助。我想实现截图功能。这样写不对。。请指点一下
- 如何在窗体上的固定区域点击鼠标产生事件
- 如何让dataset倒排
- C#中,文件保存对话框saveFileDialog的覆盖警告的默认焦点如何设置
- c# winform:StatusStrip应用!!!谢谢!!
- ReadBase64
- 如何将SQL里面的数据导入到ACCESS里面 最好不通过Dataset等中间虚拟表
- 如何判断button的单击事件是否发生
- 高手请指教:SOCKET多线程为什么出错!在线等待!(为什么没人帮我啊!,我已加到100分了!不够还可以加)
- 请教如何察看指针中的内容
- 最多输入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();这样更爽。