0

操作を数秒遅らせる最良の方法は何ですか? stackoverflow で次のコードを見つけました。

var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) };
timer.Start();
timer.Tick += (_sender, _args) =>
{
     timer.Stop();
     operation();
};

しかし、ガベージ コレクターがこのタイマーをメモリから削除するほど賢いとは思いません。これは、 /操作Tickに依存していて、タイマーがオンにならなくなることを認識していないためです。StartStop

最初にイベントを削除する必要があると思いますが、これを行うには、ラムダを別のメソッドに抽出する必要があります。単に操作を遅らせるより良い方法はありますか?

4

2 に答える 2

0

問題は、どの「操作」を遅らせようとするかです。それが現在のスレッドである場合は、Soner Gönül の解決策が最適です。また、別のスレッドに再スケジュールするようにアプリケーションに通知します。

于 2013-09-20T12:25:16.797 に答える
-1

タイマーを破棄してから null に設定してみませんか?

var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) };
timer.Start();
timer.Tick += (_sender, _args) =>
{
     timer.Stop();
     //timer.Dispose(); <-- Not available on a dispatch timer
     timer = null;
     operation();
};
于 2013-09-20T12:16:23.863 に答える