在线程池中放入线程,在所有线程结束后执行AllThreadOver方法,提示我不支持一个STA线程上对多个句柄的WaitAll
private delegate void ThreadOver(string str); private void button16_Click(object sender, EventArgs e)
{
ManualResetEvent[] Mevent = new ManualResetEvent[4];
for (int i = 0; i < 4; i++)
{
Mevent[i] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(OneThreadOver),Mevent[i]);
}
WaitHandle.WaitAll(Mevent);
AllThreadOver();
} private void OneThreadOver(object obj)
{
try
{
ThreadOver to = new ThreadOver(this.Rtext.AppendText);
this.Rtext.BeginInvoke(to,new object[]{"线程结束"});
}
catch { }
finally
{
ManualResetEvent mre = (ManualResetEvent)obj;
mre.Set();
}
}
private void AllThreadOver()
{
this.Rtext.Text += "所有现成以结束";
}
private delegate void ThreadOver(string str); private void button16_Click(object sender, EventArgs e)
{
ManualResetEvent[] Mevent = new ManualResetEvent[4];
for (int i = 0; i < 4; i++)
{
Mevent[i] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(OneThreadOver),Mevent[i]);
}
WaitHandle.WaitAll(Mevent);
AllThreadOver();
} private void OneThreadOver(object obj)
{
try
{
ThreadOver to = new ThreadOver(this.Rtext.AppendText);
this.Rtext.BeginInvoke(to,new object[]{"线程结束"});
}
catch { }
finally
{
ManualResetEvent mre = (ManualResetEvent)obj;
mre.Set();
}
}
private void AllThreadOver()
{
this.Rtext.Text += "所有现成以结束";
}
解决方案 »
- AutoResetEvent 中如果调用waitone(),该变量如果没有外部调用set()是否一直不释放
- 读取Access中附件类型字段数据
- rdlc报表数据集里有两个table出现了问题
- DEV控件怎么使用
- Web Form 中,Treeview的节点check被选中,如何让它下面的子节点也选中?
- 请问大虾,我想要用表格的形式显示出来,帮我看一下代码。实现不了,清指导。(在线等)
- C# 反射中的 升级问题(就是替换dll的问题)
- C#如何取得第三方(C++)库返回的LPSTR?
- 低级问题!!!(请进)
- 数组的移动复制
- C# 中如何直接调用SQL语句 插入或删除
- =================各位大大帮忙,不知道多线程应该如何使用================
改用Mevent