C#里多线程问题,怎样在开始一个线程的时候给线程方法传参数,即启动带参数的线程??

lcmlhs_2005 2010-09-19 03:53:57
如题:我要在创建的线程里调用的方法有参数,怎么传递参数呢?
如:thsend1 = new Thread(new ThreadStart(cssend(参数1,参数2...)));
thsend1.Start();
private void cssend(参数1,参数2...)
{
...//这是其它代码
}
上面的为什么不行啊?
...全文
481 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunxipeng 2010-09-19
  • 打赏
  • 举报
回复
BackgroundWorker receiveWork = new BackgroundWorker();
receiveWork.DoWork += new DoWorkEventHandler(receiveWork_DoWork);
receiveWork.WorkerSupportsCancellation = true;

receiveWork.RunWorkerAsync();

receiveWork.CancelAsync();
sunxipeng 2010-09-19
  • 打赏
  • 举报
回复
BackgroundWorker
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fuxuncu 的回复:]
还不如直接用匿名委托。

C# code

Thread thsend1 = new Thread(
delegate(){dosomethine();}
);



想怎么搞就怎么搞。
[/Quote]
很得法,就是这样才是最优美的。
你也可看看该文:http://www.cnblogs.com/luminji/archive/2010/09/17/1829333.html
pclsprest 2010-09-19
  • 打赏
  • 举报
回复
我在网上找的,写一个专门的类,这个类里边包含的属性,就是你要的参数,在构造函数里边给这些属性赋值,在在这个类里边写一个方法,去执行你线程要执行的东东,这个方法是在你类里边,可以访问类的属性撒,而类的属性是在实例化这个类的时候赋值的
这个方法不错,就是需要没用一次就单独定义一个类,不爽,希望有高手来个简单的方法
huwen7565833 2010-09-19
  • 打赏
  • 举报
回复
有多个参数时,传实体

//实体
class MyParams
{
public string 参数1;
public int 参数2;
}

MyParams param = new MyParams();
thsend1 = new Thread(new ParameterizedThreadStart(cssend));
thsend1.Start(param);
private void cssend(object status)
{
MyParams param = status as MyParams;
//todo
}

快乐小子飞 2010-09-19
  • 打赏
  • 举报
回复
还不如直接用匿名委托。

Thread thsend1 = new Thread(
delegate(){dosomethine();}
);


想怎么搞就怎么搞。
jx_yp 2010-09-19
  • 打赏
  • 举报
回复
Thread t1 = new Thread(new ParameterizedThreadStart(this.SendMethod1));
t1.Start(obj);

private void SendMethod1(object obj)
{
//要处理的代码
List<object> list = (List<object>)obj;
GetProcAddHistory.AddNodeService getNode = new DemoSampleAppV1.GetProcAddHistory.AddNodeService();
getNode.Url = "http://" + list[1].ToString() + "/AddNodeService.asmx";
if (list[0].ToString() != null && list[0].ToString().Length > 0)
{
//上传数据
getNode.GetProcAddHistory(list[0].ToString());
}
}
只可以串object类型传输,若是多个参数,可以 List<object> obj =new List<object>() 打包数据 ,然后用for循环取出值来即可用了,上面的我自导有几个值,所以就没有用循环,直接用list[0] 和liat[1].
上面的应该对你有用。
bloodish 2010-09-19
  • 打赏
  • 举报
回复
自定义一个包含你要的参数的Class或者Struct,并将其实例作为线程处理函数的参数传递.

class MyParams
{
public string 参数1;
public int 参数2;
}

MyParams param = new MyParams();
...

thsend1 = new Thread(new ParameterizedThreadStart(cssend));
thsend1.Start(param);
private void cssend(object status)
{
MyParams param = status as MyParams;
//todo
}
ZengHD 2010-09-19
  • 打赏
  • 举报
回复
private struct Info
{
public string a, b, c, d;
}
private void cssend(object obj)
{
Info info = (Info)obj;
}

private void btnStart_Click(object sender, EventArgs e)
{
Info info = new Info();
info.a = "a";
info.b = "c";
Thread thsend1 = new Thread(new ParameterizedThreadStart(cssend));
thsend1.Start(info);
}
q107770540 2010-09-19
  • 打赏
  • 举报
回复

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧