希望以下解决方案有所帮助!
问题:
由表示当前时钟时间按预期下面的代码始终工作。
class Program
{
static void TimerProcedure(object param)
{
Console.Clear();
Console.WriteLine(DateTime.Now.TimeOfDay);
GC.Collect();
}
static void Main(string[] args)
{
Console.Title = "Desktop Clock";
Console.SetWindowSize(20, 2);
Timer timer = new Timer(TimerProcedure, null,
TimeSpan.Zero, TimeSpan.FromSeconds(1));
Console.ReadLine();
}
}
但是,如果您在发布模式下运行相同的代码,它将仅显示第一次当前时间,但在此之后它不会更新。
解决方案
一个简单的调整,加入GC.KeepAlive(对象)将使其在释放模式也按预期工作。请参阅下面的代码。
class Program
{
static void TimerProcedure(object param)
{
Console.Clear();
Console.WriteLine(DateTime.Now.TimeOfDay);
#region Hidden
GC.Collect();
#endregion
}
static void Main(string[] args)
{
Console.Title = "Desktop Clock";
Console.SetWindowSize(20, 2);
Timer timer = new Timer(TimerProcedure, null,
TimeSpan.Zero, TimeSpan.FromSeconds(1));
Console.ReadLine();
GC.KeepAlive(timer);
}
}
即将到来的具体问题,验证计时器变量的范围是否是方法的本地。如果这是真的,你可以保持它如上所示活着。
替代的解决方案:正在计时器类级别静态变量
难道'Console.WriteLine'未在发行模式下工作?我问,因为我在控制台有问题。WriteLine在一个配置中记录到VS输出窗口,但不在另一个配置中(从未想到为什么)。在你指责计时器之前,可能值得检查。 – adv12
您确定代码块甚至运行以在释放模式下启动计时器吗?此外,你标记你的问题asp.net,也许你的应用程序域正在关闭? –
我如何确定我的计时器正在运行?我知道它是用正确的时间间隔创建的。此外,我不确定这是否与asp相关,但我认为额外的信息不会受到伤害。它是有道理的,我的应用程序域正在关闭发布,但没有在调试? – blenddd