我想同时开多个线程去执行同一块代码,但每个线程又必须有自己的多个参数,不知能否用结构体变量传值实现。(看教程有个传递参数的,但只能传递一个object型的变量。)我的想法(类似于c++里的做法):
struct MyStruct
{
public int iThreadNum;
public string strName;
public int iAge;
public string strSex;
//...
}
MyMethod(MyStruct mystruct)
{
int iAge = mystruct.iAge;
//...
} private void button1_Click(object sender, EventArgs e)
{
MyStruct mystruct = new MyStruct[20];
mystruct[0].iAge = 21;mystruct[1].iAge = 23;//...
for(int i = 0;i<20;i++)
{
Thread thread = new Thread(new ParameterizedThreadStart(myThreadMethod));
thread.Start(mystruct[i]);
}
return;
}上面我这种写法肯定不对,但表达的意思正是我想要的,请高手指教!
struct MyStruct
{
public int iThreadNum;
public string strName;
public int iAge;
public string strSex;
//...
}
MyMethod(MyStruct mystruct)
{
int iAge = mystruct.iAge;
//...
} private void button1_Click(object sender, EventArgs e)
{
MyStruct mystruct = new MyStruct[20];
mystruct[0].iAge = 21;mystruct[1].iAge = 23;//...
for(int i = 0;i<20;i++)
{
Thread thread = new Thread(new ParameterizedThreadStart(myThreadMethod));
thread.Start(mystruct[i]);
}
return;
}上面我这种写法肯定不对,但表达的意思正是我想要的,请高手指教!
解决方案 »
- DataGribView 发生以下异常: System.ArgumentException:DataGridViewComboBoxCell值无效
- 为企业建站是否应给全部源代码
- 高分请教"产品管理当中产品种类不同产品参数不同"的解决方案
- C# Excel导入问题?提示少类型或者命名空间,已经导入了Microsfot.Excel 11 object还不可以啊.
- C#入门, 谁来说一说
- 窗体变量怎么销毁
- 关于sql语句报错问题
- 有没有用C#做的屏幕抓图应用程序源代码啊?
- 进程控制的问题
- 求助,winform reportviewer 在xp系统中不能使用
- sqldatascourse中的查询语句 如果条件是布尔型该怎样
- 如果在一个二维表中找一个值对应的值呢/?
/// <summary>
/// 包裹参数的类
/// </summary>
class ParamWrapper {
public int param1 = 0;
public string param2 = "some str";
public DateTime param3 = new DateTime(2009, 1, 1);
} /// <summary>
/// 线程函数
/// </summary>
/// <param name="paramWrapper">
/// 输入参数
/// </param>
void ThreadFunc(object paramWrapper) {
// 直接将输入参数类型转换为ParamWrapper类型
ParamWrapper param = paramWrapper as ParamWrapper;
if(param == null) {
// 如果转换失败,则什么都不做
return;
}
// 否则干活....
Console.WriteLine(param.param1);
Console.WriteLine(param.param2);
Console.WriteLine(param.param3);
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++) {
Thread t = new Thread(new ParameterizedThreadStart(ThreadFunc));
t.Start(new ParamWrapper());
}
}