日期:2014-05-17  浏览次数:20861 次

大家来看一看这个神奇的问题(绝对,绝对神奇;连if else 都几乎被颠覆了),我实在是木有办法了(关于线程安全的)

        public void SetProcessInfo(int value)
        {
            if (progressBar1.InvokeRequired)
            {
                Action<int> setProcessDelegate = new Action<int>(SetProcessInfo);
                progressBar1.Invoke(setProcessDelegate, value);
            }
            else
            {//此处有断点1,条件(!progressBar1.InvokeRequired)
                if (value > progressBar1.Maximum)
                    value = progressBar1.Maximum;
                if (value < progressBar1.Minimum)
                    value = progressBar1.Minimum;

                progressBar1.Value = value;//此处有断点2,条件(progressBar1.InvokeRequired)
            }
        }

你难以想象断点2会被击中;一开始我以为是在上面if时 InvokeRequired 为false 然后在执行到断点2之间变成了 true;于是在断点1处设下断点 判断false的断点,断点2击中前断点1未被击中过;说明至少至少断点1的时候InvokeRequired为true了;
除非在if的时候InvokeRequired为false,然后到了断点1处变为了true...不然实在...
哎...谁了解的帮帮忙吧;这都出错让我怎么弄啊....当然还有个办法把线程检测那玩意关了

------解决方案--------------------
清理你的项目,重新生成,简化你的代码,先把不相关注释掉,再调试