我有一个使用 DispatcherTimer 更新时钟滴答的 WPF 应用程序。
但是,在我的应用程序运行大约 6 小时后,时钟指针角度不再变化。我已经验证 DispatcherTimer 仍在使用 Debug 触发并且角度值仍在更新,但是屏幕渲染并未反映更改。
我还使用 WPFPerf 工具 Visual Profiler 验证了 Unlabeled Time、Tick(时间管理器)和 AnimatedRenderMessageHandler(媒体内容)都在逐渐增长,直到它们消耗了近 80% 的 CPU,但内存运行稳定。
hHandRT.Angle 是对 RotateTransform 的引用
hHandRT = new RotateTransform(_hAngle);
此代码在大约 5 小时的直线运行中完美运行,但之后它会延迟并且角度变化不会呈现到屏幕上。有关如何解决此问题的任何建议或您可能知道的任何可能的解决方案。
.NET 3.5、Windows Vista SP1 或 Windows XP SP3(都显示相同的行为)
编辑:添加时钟滴答功能
//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;
}
由于时钟滴答声发生了太多事情,我目前正在尝试这种调整,看看它是否有帮助。太糟糕了,这个错误需要 5 个小时才能显现出来 :(
//DateTime startTime = DateTime.UtcNow;
//TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById(_timeZoneId);
//_now = TimeZoneInfo.ConvertTime(startTime, TimeZoneInfo.Utc, tst);
_now = _now.AddSeconds(1);