C# TPL并行只执行一部分就退出,求解?
背景介绍:
开发环境 :VS2010简体中文旗舰版
.net 版本:.net4.0
CPU :双核四线程【Intel】
错误现象 :使用 TPL 编写多核并行代码,发现只并行了其中的一部分(不能并行到底),之后就由一条线程执行到结束。编译时,代码没有问题,运行时,有时候出现运行到一定程度,程序就卡住,不再执行下去,就像死机一样。下面就贴出代码。
------解决方案--------------------当然了,在非UI线程操作界面需要使用Control.Invoke让界面去刷新。
------解决方案--------------------把你的 this.Invoke 改为 this.BeginInvoke。
我印象中,我好像从来没有使用过 Invoke,都是 BeginIncoke。我从来都非常注意不要稀里糊涂地写出阻塞式的程序。
------解决方案--------------------哎,把 static System.Threading.Semaphore sep = new System.Threading.Semaphore(1, 4);
跟sep.Release(); 那两行注释掉就那么难吗?
实在搞不懂你这里用Semaphore来做什么,如果你真的控制并发度应该由Parallel.Invoke ParallelOptions来控制啊。
还有,你的程序问题很多,很多代码写的很随意的, 下面的代码要它干嘛的?根本起不到作用。
if( this.InvokeRequired ) // 返回值为 true,表示来自 UI 线程;
//if ( true ) // 返回值为 true,表示来自 UI 线程;
{
Object[] value = { this.txtShow };
this.Invoke(this.sf, value);
}
另外,我就好奇为什么你能在main thread之外更新线程了,原来你用了CheckForIllegalCrossThreadCalls,这????