110,536
社区成员
发帖
与我相关
我的任务
分享
private void button1_Click(object sender, EventArgs e)
{
Thread Th1 = new Thread(showForm2);
for (int i = 0; i < listBox1.Items.Count; i++)
{
Th1.Start(listBox1.Items[i]);
}
}
public void showForm2(object o)
{
//处理代码
}
private void button1_Click(object sender, EventArgs e)
{
Thread Th1 = new Thread(showForm2);
Thread Th2 = new Thread(showForm2);
Thread Th3 = new Thread(showForm2);
Thread Th4 = new Thread(showForm2);
Th1.Start(listBox1.Items[0].ToString());
Th1.Start(listBox1.Items[1].ToString());
Th1.Start(listBox1.Items[2].ToString());
Th1.Start(listBox1.Items[3].ToString());
}
namespace test多线程
{
public partial class Form1 : Form
{
public Queue<string> todoList = new Queue<string>();
public const int maxRunningThread = 1;
public int ThreadCount = 0;
public Form1()
{
InitializeComponent();
}
public void showForm2(object o)
{
//处理
MessageBox.Show(o.ToString());
ThreadCount--;
}
private void button2_Click(object sender, EventArgs e)
{
for (int i = 0; i < listBox1.Items.Count; i++)
{
todoList.Enqueue(listBox1.Items[i].ToString());
}
while (true)
{
while ((todoList.Count > 0) && (ThreadCount < maxRunningThread))
{
ThreadCount++;
Thread Th1 = new Thread(showForm2);
Th1.Name = todoList.Dequeue();
Th1.Start(Th1.Name.ToString());
}
if (todoList.Count == 0)
break;
}
}
}
}
缺点是在线程没有处理完之前,while(true)会不停的运行,也是比较好资源的,各位版主请指导个更好的办法。。。。。。
List<FileInfo> fileList = new List<FileInfo>();//假设里面有文件
List<FileInfo> result = new List<FileInfo>();//用于保存处理后的文件
for (int i = 0; i < listBox1.Items.Count; i++)
{
Thread thread = new Thread(new ThreadStart(Work));
thread.Name = Convert.ToString(i);
thread.Start();
}
public void Work()
{
lock (typeof(Thread))
{
if(result.Count<fileList.Count)
{
foreach (var item in fileList)
{
//处理文件
if()//如果当前文件被处理
{
result.Add(item);
}
}
}
}
}
var j = i;
Th1.Start(listBox1.Items[j]);
总之,程序改进,往往仅需要改动一条语句。我的习惯是不到必要的时候不多说也不多做。[/quote]
能否再进阶的提示一下有何不妥之处?多谢!
for (int i = 0; i < listBox1.Items.Count; i++)
{
Thread Th1 = new Thread(showForm2);
Th1.Name = i.ToString();
Th1.Start(listBox1.Items[i]);
}
public void showForm2(object o)
{
MessageBox.Show(Thread.CurrentThread.Name);
}
var j = i;
Th1.Start(listBox1.Items[j]);
总之,程序改进,往往仅需要改动一条语句。我的习惯是不到必要的时候不多说也不多做。