最近,我遇到了一个经典的Heisenbug。情况是这样的:
该错误很容易重现,并且在“发布”和“调试”构建配置中都会发生。但是:只要我在事件处理程序中设置了断点(用于“添加新节点”菜单项)并启用它,一切都会正常工作,=>Heisenbug!我不需要做任何真正的调试。在命中断点后单击"continue“就足够了。
为了更好地理解,我制作了a video,它应该说明发生了什么。
我能想到的解决这个问题的所有方法都是让线程(应用程序是单线程的)休眠几秒钟,但这不起作用。
我非常感谢任何关于我可以尝试确定问题原因的建议。或者也许有人猜到了原因?
我的目标是3.5框架,并使用x86作为解决方案平台。树形列表控件来自DevExpress' WinForms控件;Visual Studio版本为2010。
谢谢
更新3:解决了的问题。问题是对详细视图的Focus()方法的调用没有触发GotFocus事件,该事件对于更新详细视图至关重要。(我不知道为什么,可能它已经有了焦点。)然而,这个方法并没有失败,它只是什么也没做。
现在,我只需在聚焦细节视图之前聚焦另一个控件,就是这样。调试期间一切正常的原因是,从Visual Studio切换回我的应用程序正确地将焦点设置在细节视图上。
解决这个问题的一个主要障碍是,在GotFocus事件处理程序中设置断点是无用的:每当您尝试从Visual Studio切换回应用程序时,GotFocus事件都会被重新触发,并且您会陷入无限循环。欢迎就如何解决这一问题发表意见。
不管怎样,我的具体问题已经解决了。
非常感谢所有回复或评论的人。这对我帮助很大。
更新2:在我的代码中,我选择了树中新创建的节点。这会触发FocusedNodeChangedEvent。在相应的事件处理程序中,我更新了详细信息视图并调用了它的Focus()方法。
当没有设置断点时,这似乎失败了。我认为在调试期间触发正确更新的原因是细节视图自动获得焦点。
窗口消息
更新1:以下是Eddy's answer提供的窗口消息。(已删除消息的长列表)
https://stackoverflow.com/questions/6979132
复制相似问题