次の解決策が役立ちますように!
問題:
次のコードは、常に現在の時刻を示すことによって、期待通りに動作します。あなたはリリースモードで同じコードを実行した場合
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は1つの設定でVS出力ウィンドウにログを記録しますが、別の設定ではログアウトしません(理由は分かりません)。あなたはタイマーを非難する前にチェックする価値があるかもしれません。 – adv12
リリースモードでタイマーを起動するコードブロックが実行されていますか?また、あなたの質問にasp.netというタグを付けました。おそらく、あなたのアプリケーションドメインはシャットダウンしていますか? –
タイマーが実行されていることを確認するにはどうすればよいですか?私はそれが正しい間隔で作成されていることを知っています。また、これがASPに関連しているかどうかはわかりませんが、余分な情報が傷つくことはないと思いました。私のアプリドメインがリリースではシャットダウンされていて、デバッグではなくなっているのは間違いありませんか? – blenddd