在vb6中,您可以在更改值时立即看到文本框更新,但我注意到.net中它将在您退出的方法之后才会更新。我遇到的一个初步问题是,是否有办法在方法完成之前更新文本框。
问题是我有两个文本属性设置的文本框,当方法完成时,只有其中一个文本框在屏幕上不断更新。另一种通常不会,但有时会这样做。这是非常零星的。我确实打电话给某人,以确认我没有服用疯狂的药丸,当然,当她过来时它开始工作(虽然我没有更改代码)。然后当QA人来到时它再次停止工作(再次,没有进行任何代码更改)。
我一直在做的就是设置断点并逐步完成代码,试图弄清楚是什么阻止了这个文本框的更新。在程序结束时,在它退出之前,我可以检查Text属性并且它具有正确的值,但是一旦方法完成它就会消失。
我会尽快尝试获取代码片段,但与此同时我很想知道是否有其他人遇到过这个问题以及如何调试b / c的任何好主意我都会感到有点沮丧!表单上有一个计时器在某个点启用并在运行时自行禁用...在此计时器中设置断点会验证它不是b / c断点永远不会被击中的罪魁祸首。但我想知道是否可能有其他异步过程我可能会遗漏...我不这么认为,但如果你能告诉我任何我应该寻找的东西,我可能没有想过请做。
编辑:我会发布一个代码片段,但我想发布的片段不能重现问题,我没有将问题隔离到足够小的代码部分,以便发布。我会添加更多信息:
完成更新这些文本框的方法后,控制权返回到表单。没有其他进程在进行。我一直在想,也许有些代码正在某个地方运行,这些代码正在消隐文本框,但仔细查看代码已经证实这绝对不是这样的......当方法完成时,没有其他任何事情发生。
我注意到我在调试时有时它会正常工作,并且在极少数情况下它甚至可以在正常运行时正常工作。我添加了一个DoEvents()以查看它是否可行并且它第一次执行...但后来没有继续工作。出于挫败感,我添加了多次调用以在每个文本框之后设置文本框和DoEvents(),这并没有使它完美。最后我添加了一个线程调用Sleep()300毫秒,现在看起来好多了。
请记住,表单上有另一个几乎相同的文本框,它在同一过程中设置,并且从不会出现任何更新问题。我搜索了两个控件之间的任何差异,除了大小,位置和名称,我找不到任何区别。
答案 0 :(得分:1)
我想您可以在设置文本框文本值后添加Application.DoEvents()
。它通常不赞成使用DoEvents,虽然它可以解决你在中间体中的问题。
答案 1 :(得分:0)
我认为您最好使用Invalidate();
这会导致控件重绘yourtextbox.Invalidate();
您可以将Threading用于此目的