我有一个方法UploadReportNotifier(),它订阅了一个事件,一旦我将数据上传到数据库就会引发。在UploadReportNotifier()中,我想重置我的GUI上的一些值,即progressbars等,但我希望在这之间有一段时间延迟。
是否可以在UploadReportNotifier()中创建一个线程并调用thread.Sleep,或者timer()类是否更合适?
感谢您的帮助。
答案 0 :(得分:2)
如果您的目标是在执行UploadReportNotifier
之后等待一段时间,然后再更新所有GUI控件,那么计时器将是一个很好的解决方案IMO。
在UploadReportNotifier
方法中,您可以创建并启动计时器,以便更新我的GUI"代码将在几次后执行。不要忘记在GUI更新后停止/丢弃计时器,因为您可能不希望它多次执行。
您可以使用System.Windows.Forms.Timer
计时器类(您可能知道,有多个计时器类可用)。
这个不是最准确的,但是它在UI线程中执行代码,因此在修改UI时不会处理跨线程异常。
答案 1 :(得分:1)
我看到你找到了解决方案。我只想提一下,在这种情况下,你应该总是选择超过Thread
+ Sleep
的计时器,这只是一个应该永远避免的丑陋黑客。
定时器非常棒,因为它们还能够在GUI线程上执行代码,因此您无需使用Invoke
或BeginInvoke
。例如,WinForms为System.Windows.Forms.Timer
,WPF为System.Windows.Threading.DispatcherTimer
。