为了账号安全,请及时绑定邮箱和手机立即绑定

C# 线程池【丢失线程】和判断线程池中任务是否结束。【粗错了,求解】

C# 线程池【丢失线程】和判断线程池中任务是否结束。【粗错了,求解】

慕娘9325324 2018-12-07 00:11:32
private void button4_Click(object sender, EventArgs e) { DateTime dt1 = DateTime.Now; if (textBox3.Text == "") richTextBox3.Text += "2的0次方为1"; else { ManualResetEvent[] mr = new ManualResetEvent[int.Parse(textBox3.Text)]; for (int i = 1; i <= int.Parse(textBox3.Text); i++) { //int poolnum = i; int temp = new int(); temp = i; Control.CheckForIllegalCrossThreadCalls = false; mr[temp - 1] = new ManualResetEvent(false); ThreadPool.QueueUserWorkItem(delegate(object num) { long pre = 1; for (int n = 1; n <= temp; n++) { Thread.Sleep(1); pre *= 2; } richTextBox3.AppendText("2的" + temp.ToString() + "次方为: " + pre.ToString() + "\r\n"); mr[temp - 1].Set(); }); } WaitHandle.WaitAll(mr); } DateTime dt2 = DateTime.Now; label8.Text = (dt2 - dt1).TotalSeconds.ToString(); } 当我丢进去50个任务的时候,他就会漏掉几个数字不会计算。还有现在加了WaitHandle.WaitAll(mr);之后mr[temp-1].set()都执行不到,程序就会死等在那里不动了。高手指点一下啊。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 369 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信