111,120
社区成员
发帖
与我相关
我的任务
分享
static object o = new object();
private void Submit_Click(object sender, EventArgs e)
{
lock (o)
{
trd_cnt++;
if (trd_cnt > trd.Length - 1)
return;
trd[trd_cnt] = new Thread(new ThreadStart(delegate { ThreadTask(trd_cnt, String.Empty, String.Empty, DateTime.Now); }));
trd[trd_cnt].Start();
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsApplication188
{
public partial class Form1 : Form
{
ListBox LB = new ListBox();
public Form1()
{
InitializeComponent();
LB.Parent =this;
Button B = new Button();
B.Location = new Point(0, 200);
B.Parent = this;
B.Click += new EventHandler(Submit_Click);
}
Thread[] trd = new Thread[20];//线程数组
public int trd_cnt = -1;//公共变量
private void Submit_Click(object sender, EventArgs e)
{
trd_cnt++;
if (trd_cnt > trd.Length - 1)
return;
trd[trd_cnt] = new Thread(new ThreadStart(delegate { ThreadTask(trd_cnt, String.Empty, String.Empty, DateTime.Now); }));
trd[trd_cnt].Start();
}
private void ThreadTask(int list_no, string StrSN, string SeleProd, DateTime event_time)
{
this.Invoke(new Action<String>(DoSetString), new Object[] { list_no .ToString ()});
}
void DoSetString(String S)
{
LB.Items.Add(S);
}
}
}
thr[trd_cnt]= new Thread(new ThreadStart(delegate { ThreadTask(trd_cnt, StrSN, SeleProd, event_time); }));
//改动成以下
class WorkThreadParam
{
public string Parm1;
public string Parm2;
public int Parm3;
}
thr[trd_cnt]= new Thread(new ParameterizedThreadStart(ThreadTask));
WorkThreadParam newParm = new WorkThreadParam();
newParm.Parm3 = trd_cnt;
newParm.Parm1 = string.Empty;
newParm.Parm2 = string.Empty;
thr[trd_cnt].Start(newParm);
void ThreadTask(object a)
{
//在这里会从thr[trd_cnt].Start(newParm)那里接受newParm 它是一个WorkThreadParam类型参数,强行转换过来然后用就可以了
}