希望以下解決方案有所幫助!
問題:
由表示當前時鐘時間按預期下面的代碼始終工作。
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