我有一個方法UploadReportNotifier(),它訂閱了一個事件,當我完成將數據上傳到數據庫後引發該事件。在UploadReportNotifier()我想重置我的GUI上的一些值,即進度條等,但我希望有這樣做之間的時間延遲。在任務中創建一個線程
是否有可能在UploadReportNotifier()中創建一個線程並調用thread.Sleep,或者timer()類更合適?
感謝您的幫助。
我有一個方法UploadReportNotifier(),它訂閱了一個事件,當我完成將數據上傳到數據庫後引發該事件。在UploadReportNotifier()我想重置我的GUI上的一些值,即進度條等,但我希望有這樣做之間的時間延遲。在任務中創建一個線程
是否有可能在UploadReportNotifier()中創建一個線程並調用thread.Sleep,或者timer()類更合適?
感謝您的幫助。
我看到你找到了你的解決方案。我只想提一提,在這種情況下,你應該總是選擇超過Thread
+ Sleep
的定時器,這是一種應該總是避免的醜陋攻擊。
定時器非常棒,因爲它們也能夠在GUI線程上執行它們的代碼,因此您不需要使用Invoke
或BeginInvoke
。例如WinForms的System.Windows.Forms.Timer
或WPF的System.Windows.Threading.DispatcherTimer
。
如果您的目標是在更新所有GUI控件之前等待UploadReportNotifier
執行後等待幾個時間,那麼計時器將是IMO的一個很好的解決方案。
在你的UploadReportNotifier
方法中,你可以創建並啓動一個計時器,這樣你的「更新我的GUI」代碼將在幾次之後執行。不要忘記在GUI更新後停止/處理定時器,因爲您可能不希望它多次執行。
您可以使用System.Windows.Forms.Timer
計時器類(您可能知道,有多個可用的計時器類)。 這不是最準確的一個,但它在UI線程中執行代碼,因此在修改UI時不會處理跨線程異常。
非常感謝Ken,非常感謝! –
我以爲我有,但它的方式奠定了它不工作,所以我錯了。 –
看起來你和Ken2K都建議定時器,所以我會選擇這個選項。謝謝你的幫助。 –