2013-07-26 111 views
-3

我需要启动一个线程,发送200个不同的线程一个字符串(url),然后他们开始。第一个线程然后停止。当此url返回404错误时,所有线程都必须停止,并且第一个线程需要启动。我如何组织它?谢谢。如何让所有线程等待一个

对不起,我的英语。我希望你明白我的)

我如何启动线程:

Thread[] thr; 
int good_delete; 
static object locker = new object(); 
private void button1_Click(object sender, EventArgs e) 
{ 
    button1.Enabled = false; 
    button2.Enabled = true; 
    decimal value = numericUpDown1.Value; 
    int i = 0; 
    int j = (int)(value); 
    thr = new Thread[j]; 
    for (; i < j; i++) 
    { 
     thr[i] = new Thread(new ThreadStart(go)); 
     thr[i].IsBackground = true; 
     thr[i].Start(); 
    } 
} 
+0

的方法你发送不同的URL给每个线程? – Adil

+0

@Adil NO,1 url – user2608247

+8

如果你有200个线程,你做错了什么。 – Jon

回答

1

您应该使用WaitHandle.WaitAll方法这一点。欲了解更多信息,请看this reference

编辑您的代码可能是这样的:

之后,你应该在你的go方法设置事件:

private void go(object state) 
{ 
    //put your code here 
    ((ManualResetEvent)state).Set(); 
} 

还要注意的是传递给WaitAllWaitHandle对象的最大数量方法是64,所以你必须手动分割源。

祝你好运!

+1

Typo,WaitHangle应该是WaitHandle – Adil

+0

WaitAll对事件处理程序的数量有限制 –

0

任何方式才达到你的目标,你应该使用加入线程对象

for (; i < j; i++) 
    { 
    thr[i] = new Thread(new ThreadStart(go)); 
    thr[i].IsBackground = true; 
    thr[i].Start(); 
    } 

    for (; i < j; i++) 
    { 
    thr[i].Join(); 
    }