首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# TPL并行只施行一部分就退出,求解

2013-08-22 
C#TPL并行只执行一部分就退出,求解?背景介绍:开发环境 :VS2010简体中文旗舰版.net 版本:.net4.0CPU:双核四

C# TPL并行只执行一部分就退出,求解?
背景介绍:
     
     开发环境 :VS2010简体中文旗舰版
     .net 版本:.net4.0
     CPU      :双核四线程【Intel】
     错误现象 :使用 TPL 编写多核并行代码,发现只并行了其中的一部分(不能并行到底),之后就由一条线程执行到结束。编译时,代码没有问题,运行时,有时候出现运行到一定程度,程序就卡住,不再执行下去,就像死机一样。下面就贴出代码。
     C# 并行 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,这????

热点排行