【问题标题】:how to keep a windows application alive in C#?如何在 C# 中保持 Windows 应用程序处于活动状态?
【发布时间】:2012-12-23 19:47:49
【问题描述】:

我的主函数中有一个包含以下代码的应用程序:

var timer = new System.Threading.Timer(Callback_f, null, TimeSpan.Zero, TimeSpan.FromMinutes(srcInterval));

好的,这确实有效,但只有当我放置一些东西来让我的应用程序保持活力时,比如console.readkey() 或无限循环:

while (true) 
{

}.

无限循环对我来说不是一个选项,因为它太耗时了。问题是我也不能使用 console.readkey 函数,因为它是一个 Windows.forms 应用程序,其中没有任何表单。 (即,当我将它作为控制台应用程序运行并在最后放置 console.readkey() 方法时,它可以工作。但是我想避免显示黑色窗口,它是一个没有界面的应用程序,在后台运行)。有什么建议吗?

【问题讨论】:

  • 您能否详细说明您要达到的目标?你能用 Thread.Sleep(...) 和 Thread.Join(...) 吗?
  • 您需要记录您打算如何终止程序。如果您不知道,那么您可能应该考虑一项服务。

标签: c# timer keep-alive


【解决方案1】:

尝试使用方法Thread.Join();

【讨论】:

  • @Dex:您正在启动一个计时器并且在主线程上什么都不做。为什么不让主线程在无限循环中完成工作,并在任务之间使用Sleep(srcInterval)
  • @Ed S. 他会不会太消耗 CPU 和占用大量资源?
  • @Dex: 不会。Sleep() 会将您的 CPU 时间让给其他进程。你认为定时器在做什么?即使是 Sleep(1) 也会将你过于激进的 while(true) 循环变成只占用很少 CPU 的东西。
  • @Ed S. 我也会试试。似乎是一个更简单的解决方案,我认为计时器以某种比 sleep() 方法“更整洁”的方式工作。
  • @Dex:当主线程无事可做时,我只是看不出启动计时器的意义。当您需要与主线程中发生的任何事情一起执行操作时,请使用新线程。您只需要void main(...) { while(true) { DoSomething(); if(someExitCondition) break; Sleep(srcInterval); } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
相关资源
最近更新 更多