DispatcherTimerを使用してクロックティックを更新するWPFアプリケーションがあります。DispatcherTimerが時間の経過とともにCPUを消費して、WPFビジュアルが正しくレンダリングされないのを引き起こします。
しかし、アプリケーションを約6時間実行しても、時計の針の角度は変更されなくなりました。私は、DispatcherTimerがまだDebugを使って起動していること、そして角度値がまだ更新されていることを確認しましたが、スクリーンレンダリングは変更を反映しません。
また、WPFPerfツールを使用して、ラベルなし時間、目盛り(Time Manager)、AnimatedRenderMessageHandler(Media Content)がすべてCPUの約80%を消費するまで徐々に増加していることを確認しました。
hHandRT.Angleは、このコードは、直進走行の約5時間のために完璧に動作しますが、それは遅延し、角度変化が画面にレンダリングされません。その後
hHandRT = new RotateTransform(_hAngle);
RotateTransform
への参照です。この問題のトラブルシューティング方法や可能性のある解決策の提案。.NET 3.5、Windows VistaのSP1またはWindows XP SP3(両方が同じ挙動を示す)
EDIT:クロックティック機能にあまりで起こっての線に沿って
//In Constructor
...
_dt = new DispatcherTimer();
_dt.Interval = new TimeSpan(0, 0, 1);
_dt.Tick += new EventHandler(Clock_Tick);
...
private void Clock_Tick(object sender, EventArgs e)
{
DateTime startTime = DateTime.UtcNow;
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById(_timeZoneId);
_now = TimeZoneInfo.ConvertTime(startTime, TimeZoneInfo.Utc, tst);
int hoursInMinutes = _now.Hour * 60 + _now.Minute;
int minutesInSeconds = _now.Minute * 60 + _now.Second;
_hAngle = (double)hoursInMinutes * 360/720;
_mAngle = (double)minutesInSeconds * 360/3600;
_sAngle = (double)_now.Second * 360/60;
// Use _sAngle to showcase more movement during Testing.
//hHandRT.Angle = _sAngle;
hHandRT.Angle = _hAngle;
mHandRT.Angle = _mAngle;
sHandRT.Angle = _sAngle;
//DSEffect
// Add Shadows to Hands creating a UNIFORM light
//hands.Effect = textDropShadow;
}
を追加しますクロックティック、私は現在、この調整が役立つかどうかを確認しようとしています。バグが顕在化するために:(
//DateTime startTime = DateTime.UtcNow;
//TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById(_timeZoneId);
//_now = TimeZoneInfo.ConvertTime(startTime, TimeZoneInfo.Utc, tst);
_now = _now.AddSeconds(1);
私は答えは分かりませんが、それは興味深い問題です。私はいくつかの答えを見ることを楽しみにしています。 –
ディスパッチャータイマーにはどのくらいの頻度でチェックを入れますか? –
@Greg今もその部分を追加しました。毎秒更新されます。 – discorax