.net WinForm应用程序中的后台进程(定期“服务”)

.net WinForm应用程序中的后台进程(定期“服务”),.net,winforms,multithreading,backgroundworker,.net,Winforms,Multithreading,Backgroundworker,在WinForm项目中设置每10分钟运行一次的后台进程的最佳实践是什么?是否需要在表单外使用后台工作人员?还是有一种更通用的方法可以应用于更多的项目样式 也许我应该在下线前调用一些代码: Application.Run(new Form1()); 您可以使用任务计划程序来计划应用程序 如果您想在应用程序中使用计时器,您可以使用计时器或库(如),也可以使用任务计划程序来计划应用程序 如果要在应用程序中使用计时器,可以使用计时器或库(如),通常,如果希望Windows窗体应用程序定期运行某些代码

在WinForm项目中设置每10分钟运行一次的后台进程的最佳实践是什么?是否需要在表单外使用后台工作人员?还是有一种更通用的方法可以应用于更多的项目样式

也许我应该在下线前调用一些代码:

 Application.Run(new Form1());

您可以使用任务计划程序来计划应用程序


如果您想在应用程序中使用计时器,您可以使用计时器或库(如

),也可以使用任务计划程序来计划应用程序


如果要在应用程序中使用计时器,可以使用计时器或库(如

),通常,如果希望Windows窗体应用程序定期运行某些代码,则在其中一个窗体上使用计时器是处理通知的适当方法

但是,正如您似乎已经意识到的,这将要求您安装并运行一个表单,并将您与Windows表单基础结构绑定


另一种替代方法是使用类,它通过后台线程通知您。但是,如果使用这种方法,如果希望“流程”与用户界面交互,则需要使用某种形式的同步。最好的平台无关方法(适用于Windows窗体+WPF)是在需要时封送回UI线程。

通常,如果希望Windows窗体应用程序定期运行某些代码,则在其中一个窗体上使用封送是处理通知的适当方法

但是,正如您似乎已经意识到的,这将要求您安装并运行一个表单,并将您与Windows表单基础结构绑定


另一种替代方法是使用类,它通过后台线程通知您。但是,如果使用这种方法,如果希望“流程”与用户界面交互,则需要使用某种形式的同步。最好的平台无关方法(适用于Windows窗体+WPF)是在需要时封送回UI线程。

这是非常不寻常的,请仔细考虑。当用户在后台工作到期前一秒钟关闭主窗体时会发生什么情况?是到期还是完成?你能解释一下缺点吗?我想在开始第一次跑步之前我应该等10秒钟。。。然后每10分钟一次。这很不寻常,仔细想想。当用户在后台工作到期前一秒钟关闭主窗体时会发生什么情况?是到期还是完成?你能解释一下缺点吗?我想在开始第一次跑步之前我应该等10秒钟。。。然后每10分钟一次。实际上,对于我正在做的事情,我想我不会从这些工作中回到UI。如果是这样,那么System.Threading.Timer是更好的方法吗+1在SyncrhonizationContext上。有更多的阅读要做!如果它与UI无关,那么就使用threading.timer-它在单独的线程中工作,因此如果你不需要UI就更好了。实际上,对于我正在做的事情,我想我不会从这些工作中回到UI。如果是这样,那么System.Threading.Timer是更好的方法吗+1在SyncrhonizationContext上。有更多的阅读要做!如果它与UI无关,那么使用threading.timer-它在单独的线程中工作,因此如果您不需要Quartz.NET上的UI.+1,它会更好一些。也许我现在需要的有点过分了。但是很高兴知道这是真的。在Quartz.NET上+1。也许我现在需要的有点过分了。但很高兴知道这是真的。