-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();
    }
}
4

2 に答える 2

1

WaitHandle.WaitAllこれにはメソッドを使用する必要があります。詳細については、このリファレンスを参照してください。

コードを次のように編集します。

int j = (int)(value);
thr = new Thread[j];
ManualResetEvent[] manualEvents = new ManualResetEvent[j];
for (int i = 0; i < j; i++)
{
    manualEvents[i] = new ManualResetEvent(false);
    ThreadPool.QueueUserWorkItem(new WaitCallback(go), manualEvents[i]);
}
WaitHandle.WaitAll(manualEvents);

その後、goメソッドでイベントを設定する必要があります。

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

WaitHandleまた、メソッドに渡されるオブジェクトの最大数WaitAllは 64 であるため、ソースを手動で分割する必要があることに注意してください。

幸運を!

于 2013-07-26T09:41:15.917 に答える