在任务中创建线程

时间:2012-06-12 11:17:44

标签: winforms multithreading c#-4.0 timer task

我有一个方法UploadReportNotifier(),它订阅了一个事件,一旦我将数据上传到数据库就会引发。在UploadReportNotifier()中,我想重置我的GUI上的一些值,即progressbars等,但我希望在这之间有一段时间延迟。

是否可以在UploadReportNotifier()中创建一个线程并调用thread.Sleep,或者timer()类是否更合适?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如果您的目标是在执行UploadReportNotifier之后等待一段时间,然后再更新所有GUI控件,那么计时器将是一个很好的解决方案IMO。

UploadReportNotifier方法中,您可以创建并启动计时器,以便更新我的GUI"代码将在几次后执行。不要忘记在GUI更新后停止/丢弃计时器,因为您可能不希望它多次执行。

您可以使用System.Windows.Forms.Timer计时器类(您可能知道,有多个计时器类可用)。 这个不是最准确的,但是它在UI线程中执行代码,因此在修改UI时不会处理跨线程异常。

答案 1 :(得分:1)

我看到你找到了解决方案。我只想提一下,在这种情况下,你应该总是选择超过Thread + Sleep的计时器,这只是一个应该永远避免的丑陋黑客。

定时器非常棒,因为它们还能够在GUI线程上执行代码,因此您无需使用InvokeBeginInvoke。例如,WinForms为System.Windows.Forms.Timer,WPF为System.Windows.Threading.DispatcherTimer