读书人

大家来看一看这个神奇的有关问题(绝对

发布时间: 2013-02-15 15:46:56 作者: rapoo

大家来看一看这个神奇的问题(绝对,绝对神奇;连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...不然实在...
哎...谁了解的帮帮忙吧;这都出错让我怎么弄啊....当然还有个办法把线程检测那玩意关了
[解决办法]
清理你的项目,重新生成,简化你的代码,先把不相关注释掉,再调试

读书人网 >C#

热点推荐