大家来看一看这个神奇的有关问题(绝对,绝对神奇;连if else 都几乎被颠覆了),小弟我实在是木有办法了(关于线程安全的)
大家来看一看这个神奇的问题(绝对,绝对神奇;连if else 都几乎被颠覆了),我实在是木有办法了(关于线程安全的)
你难以想象断点2会被击中;一开始我以为是在上面if时 InvokeRequired 为false 然后在执行到断点2之间变成了 true;于是在断点1处设下断点 判断false的断点,断点2击中前断点1未被击中过;说明至少至少断点1的时候InvokeRequired为true了;
除非在if的时候InvokeRequired为false,然后到了断点1处变为了true...不然实在...
哎...谁了解的帮帮忙吧;这都出错让我怎么弄啊....当然还有个办法把线程检测那玩意关了
------解决方案--------------------
清理你的项目,重新生成,简化你的代码,先把不相关注释掉,再调试
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...不然实在...
哎...谁了解的帮帮忙吧;这都出错让我怎么弄啊....当然还有个办法把线程检测那玩意关了
------解决方案--------------------
清理你的项目,重新生成,简化你的代码,先把不相关注释掉,再调试