一个多线程的问题

zj_2009 2009-11-26 07:03:34
各位: 需求是这样的, 在Main方法里在. 我一次性要开10个线程, 十个线程跑同一个方法, 但方法传入的参数不同, 等这十个线程都跑完了, 接下来再做Main方法里其他的事情

public void Main()

{

for(int i = 0 ; i<10 ;i++)

{

thread td = new thred(方法名) // 这里开始跑线程,

}

// DoSomeThing() // 一定要等到线程跑完了再接下来处理下面的事.

}



上面这个程序只是一个比喻, 希望大家帮帮我, 当然最好有源码, 因为明天就要交差了.
...全文
98 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsy_zhu 2009-11-26
  • 打赏
  • 举报
回复
下面的代码已经在Vs2005环境下编译通过并执行(该工程为C#控制台程序),请参考
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Collections.ObjectModel;

namespace ThreadControler
{
class Program
{
static void Main(string[] args)
{
m_ResultInfoList=new Collection<string>();
Collection<Thread> threadList=new Collection<Thread>();
for (int i = 0; i < 10; i++)
{
Thread workThread = new Thread(new ParameterizedThreadStart(TestThreadProc));
threadList.Add(workThread);
workThread.Start(i);
}
m_ThreadReadyEvent.Set();
foreach (Thread tempThread in threadList)
{
tempThread.Join();
}
foreach (String tempResult in m_ResultInfoList)
{
Console.WriteLine(tempResult);
}
Thread.Sleep(5000);
}
private static Mutex m_ResultListMutex = new Mutex();
private static Collection<String> m_ResultInfoList=null;
private static EventWaitHandle m_ThreadReadyEvent = new EventWaitHandle(false, EventResetMode.ManualReset);
private static void TestThreadProc(Object index)
{
m_ThreadReadyEvent.WaitOne();
for (int i = 0; i < 5; i++)
{
Thread.Sleep(500);
}
m_ResultListMutex.WaitOne();
m_ResultInfoList.Add(index.ToString());
m_ResultListMutex.ReleaseMutex();
}
}
}
zj_2009 2009-11-26
  • 打赏
  • 举报
回复
谢谢顶.

希望还有更多的答案.
QingT26 2009-11-26
  • 打赏
  • 举报
回复
顶一下
yyz985 2009-11-26
  • 打赏
  • 举报
回复
WaitHandle.WaitAll(new WaitHandle[]{waitObj1, waitObj2});
zj_2009 2009-11-26
  • 打赏
  • 举报
回复
WaitHandle.WaitAll(waitObj1, waitObj2);

你这样写也编译不过啊.
hz303257337 2009-11-26
  • 打赏
  • 举报
回复
static void Main(string[] args)
{
Thread t1 = new Thread(new ThreadStart(dowork));
t1.Name = "t";
t1.Start();
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i+" ");
}
Console.WriteLine();
}
static void dowork()
{

for (int j = 0; j < 10; j++)
{
Console.WriteLine("{0},{1}",Thread.CurrentThread.Name,j);
Thread.Sleep(50);
}

}
不知道是不是这样的。。。。
java小牛1 2009-11-26
  • 打赏
  • 举报
回复
呵呵
烈火蜓蜻 2009-11-26
  • 打赏
  • 举报
回复
这个结贴率也太低了吧
yyz985 2009-11-26
  • 打赏
  • 举报
回复
WaitHandle
zj_2009 2009-11-26
  • 打赏
  • 举报
回复
二楼. 你的代码有很多错误.
zj_2009 2009-11-26
  • 打赏
  • 举报
回复
WaitHandler 这是哪个命名空间的啊.
yyz985 2009-11-26
  • 打赏
  • 举报
回复
AutoResetEvent waitObj1 = new AutoResetEvent(false);
AutoResetEvent waitObj2 = new AutoResetEvent(false);
void ProcessLoop1()
{
....
waitObj1.Set();
}
void ProcessLoop2()
{
....
waitObj2.Set();
}

Main()
{
waitObj1.Reset();
waitObj2.Reset();
....
for(....){... new Thread...}
WaitHandler.WaitAll(waitObj1, waitObj2);
}
懦芞 2009-11-26
  • 打赏
  • 举报
回复
这个不会,帮顶。

111,120

社区成员

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

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

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