我有一个基于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'使这种分离变得容易,因为你可以将代码放入事件处理程序中,让它担心在正确的线程中引发它。 –