我有一個基於vb.net的Windows應用程序,當點擊「GO」按鈕時,一堆數據被加載到數據庫中。所以在我的應用程序中,只要點擊「GO」按鈕,我想只是禁用它,並希望在上傳完成後啓用它。 現在,在我的btnGo_Click()具體方法我:按鈕禁用和啓用
btnGo.Enabled = False
作爲一線和
btnGo.Enabled = True
在相同的方法,最後一行。
但我不明白爲什麼「GO」雖然顯示爲禁用,但在處理過程中仍然允許點擊。此外,如果我刪除最後一行,它將被永久禁用,並且不允許單擊事件。
請提出我做錯了什麼?
編輯(日期:2012年1月25日):我按照我們的同事們的建議進行了修改,但我在這裏面臨一個新問題。我面臨的問題是文本框被更新,但並非總是如此。我在後臺工作線程的「_ProgressChanged」事件中更新了我的文本框。在我的情況下,如果有10個記錄上傳。然後在texbox中有10行更新。但文本框中只顯示幾行。它再次是重繪問題嗎?請建議...因爲所有其他事情都按照您的建議完成
我同意。使用Backgroundworker是去這裏的路。它會保持用戶界面的響應。 – BenR
嗨科迪,尼斯的文章。我在這裏有一個查詢:我有一個文本框得到更新,上傳(數據庫更新)正在發生。那麼我應該將這個特定的代碼移動到「backgroundWorker1_ProgressChanged」事件處理程序中嗎?因爲否則在「backgroundWorker1_DoWork」事件處理程序中,它會引發我「Cross Thread usage ...」的異常 –
@Justin:是的,如果您要響應進度更新,則該代碼需要進入ProgressChanged事件處理程序。 'DoWork'事件處理程序方法就是你在後臺線程上做什麼的地方。你必須記住的是,你只能從一個線程(主要的,被指定爲UI線程)與你的UI進行交互。其他一切都無法觸及它,否則你會得到一個關於交叉線程的例外。 'BackgroundWorker'使這種分離變得容易,因爲你可以將代碼放入事件處理程序中,讓它擔心在正確的線程中引發它。 –