在vb6中,当值更改时,您可以立即看到文本框更新,但我在.net注意到它将不会更新,直到您退出的方法退出。我的一个初步问题是在方法完成之前是否有办法更新文本框。奇怪的形式行为。文本只有在设置文本属性后才会出现在文本框中
问题是我有两个文本框的文本属性被设置,当方法完成时,只有其中一个在屏幕上一致地更新。另一个通常不会,但有时会。这是零星的很。我从字面上打电话过来确认我没有服用疯狂的药片,当然,当她过来时它开始工作(尽管我没有改变代码)。然后,当质量保证人员出现时,它再次停止工作(再次,未做任何代码更改)。
我一直在做的就是设置断点并逐步浏览代码,试图找出是什么让这个文本框被更新。在程序结束时,在它退出之前,我可以检查Text属性并且它具有正确的值,但只要方法结束,它就会消失。
我会尝试尽快得到一段代码,但同时我很想知道是否有其他人有过这个问题,以及关于如何调试B/C的任何好的想法,我有点沮丧!表单上有一个计时器,它在某个点被启用,并在运行时禁用自身...在此计时器中设置一个断点,以验证它不是导致断点不被击中的罪魁祸首。但我想知道是否可能会有其他异步过程,我可能会错过...我不这么认为,但如果你能告诉我任何事情,我应该寻找,我可能没有想过请做。
编辑:我会发布代码段,但我想发布的代码段不会重现问题,并且我没有将问题隔离到足够小的代码段,以便实际发布。我会添加更多的信息,但:
完成更新这些文本框的方法后,控件返回到窗体。没有其他进程正在进行。我一直在想,也许一些代码正在运行的地方是空白的文本框,但通过代码的彻底审视已经证实,这绝对不是这种情况...当方法完成时没有其他事情发生。
我注意到,当我调试时,有时会正常工作,在罕见的情况下,甚至在正常运行时也能正常工作。我添加了一个DoEvents()来查看它是否可以工作,并且它是第一次......但是之后没有继续工作。出于挫折感,我在每一个之后加入了重复的调用来设置文本框和DoEvents(),并且没有使它完美。最后我添加了一个线程调用Sleep()300毫秒,现在看起来好多了。
请记住,表单上还有另一个几乎相同的文本框,它在相同的过程中被设置,并且从来没有任何更新问题。我已经搜索了两个控件之间的区别,除了大小,位置和名称之外,我找不到任何区别。
更新代码 – Nighil 2011-12-23 04:30:18
@Nighil的问题,我想你忽略了,我说的部分:“我会尝试尽快得到一个代码片段:) :) – 2011-12-23 04:32:58
在VB 6和VB.NET之间没有什么独特之处。 'DoEvents'是黑客解决方案,但它不是一个好的解决方案。这个教训永远不会在你的UI(主)线程上做长时间运算或其他工作;它会导致UI冻结。 BackgroundWorker组件是为这个应用程序量身定制的。 MSDN页面有一个很好的例子,你可以在这里找到很多其他人问这个问题。 – 2011-12-23 10:34:58