Winforms 在任务内创建线程

Winforms 在任务内创建线程,winforms,multithreading,c#-4.0,timer,task,Winforms,Multithreading,C# 4.0,Timer,Task,我有一个UploadReportNotifier()方法,它订阅了一个事件,在我完成将数据上载到数据库后会引发该事件。在UploadReportNotifier()中,我想重置GUI上的一些值,例如progressbars等,但我希望在执行此操作之间有一个时间延迟 是否可以在UploadReportNotifier()内创建一个线程并调用thread.Sleep,或者timer()类更合适 谢谢你的帮助 如果您的目标是在执行UploadReportNotifier之后等待一段时间,然后再更新所有

我有一个UploadReportNotifier()方法,它订阅了一个事件,在我完成将数据上载到数据库后会引发该事件。在UploadReportNotifier()中,我想重置GUI上的一些值,例如progressbars等,但我希望在执行此操作之间有一个时间延迟

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


谢谢你的帮助

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

在您的
UploadReportNotifier
方法中,您可以创建并启动一个计时器,以便在几分钟后执行“更新我的GUI”代码。不要忘记在GUI更新后停止/处理计时器,因为您可能不希望它被多次执行

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

如果您的目标是在更新所有GUI控件之前执行
UploadReportNotifier
之后等待几分钟,那么计时器将是一个很好的解决方案

在您的
UploadReportNotifier
方法中,您可以创建并启动一个计时器,以便在几分钟后执行“更新我的GUI”代码。不要忘记在GUI更新后停止/处理计时器,因为您可能不希望它被多次执行

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

我知道您已经找到了解决方案。我只想提一下,在这种情况下,你应该总是选择定时器而不是线程,这在我看来只是一个丑陋的黑客行为,应该永远避免


计时器非常好,因为它们还能够在GUI线程上执行代码,所以您不需要使用
Invoke
BeginInvoke
。例如,WinForms的
System.Windows.Forms.Timer
或WPF的
System.Windows.Threading.dispatchermer

我知道您已经找到了解决方案。我只想提一下,在这种情况下,你应该总是选择定时器而不是线程,这在我看来只是一个丑陋的黑客行为,应该永远避免


计时器非常好,因为它们还能够在GUI线程上执行代码,所以您不需要使用
Invoke
BeginInvoke
。例如,WinForms的
System.Windows.Forms.Timer
或WPF的
System.Windows.Threading.dispatchermer

我以为我有,但它的布局方式不起作用,所以我错了。看起来你和Ken2K都建议使用计时器,所以我会选择那个选项。谢谢你的帮助。我以为我有,但它的布局方式不起作用,所以我错了。看起来你和Ken2K都建议使用计时器,所以我会选择。谢谢你的帮助。非常感谢肯,非常感谢!非常感谢肯,非常感谢!