在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