【发布时间】:2010-10-15 06:40:52
【问题描述】:
我正在尝试找到一种方法来触发 Silverlight 事件,使其在一天中的特定时间发生。该应用程序将用完浏览器并将一直运行。我发现了一些方法,它们使用计时器每分钟触发一个事件,然后检查它是否是做某事的正确时间,但这听起来很混乱。是否有某种方式可以在例如 2010 年 9 月 23 日上午 10:34 触发事件?
【问题讨论】:
标签: silverlight events scheduling
我正在尝试找到一种方法来触发 Silverlight 事件,使其在一天中的特定时间发生。该应用程序将用完浏览器并将一直运行。我发现了一些方法,它们使用计时器每分钟触发一个事件,然后检查它是否是做某事的正确时间,但这听起来很混乱。是否有某种方式可以在例如 2010 年 9 月 23 日上午 10:34 触发事件?
【问题讨论】:
标签: silverlight events scheduling
如果您希望计时器在应用程序重新启动后仍然存在,我建议您使用轮询并在某处保留计划任务。
否则只需将计时器间隔设置为当前时间和预定时间之间的时间跨度。
【讨论】:
我不相信 Silverlight 中有这样的功能。如果您不喜欢轮询方法,您总是可以得到 DateTime.Now 和目标时间之间的差异,并为该时间设置一个计时器。虽然我不知道这有多可靠。
【讨论】:
Timer 是这项工作的工具,我认为它没有任何理由比任何其他方法更不可靠。一个简单的代码示例将大大增强这个答案。
感谢您的回复。我仍然没有找到任何东西,但最终使用 StoryBoard 作为计时组件,因为 DispatcherTimer 与 UI 在同一线程中运行,而 StoryBoard 没有。
您可以在此处阅读有关两者之间比较的更多信息。
http://blogs.silverlight.net/blogs/msnow/archive/2009/11/09/69731.aspx
【讨论】:
我不知道有任何控件可以满足您的要求。以下是我熟悉的计时器:
我认为最好的办法是使用间隔为 30 秒的 DispatcherTimer,然后将实际时间与预期时间和日期相匹配。 据我所知,此类计时器适用于小间隔,因此较大的间隔将不太准确。 (我在纠正中)
编辑:MSDN remarks on timing:“定时器不能保证在时间间隔发生时准确执行,但保证在时间间隔发生之前不会执行。这是因为DispatcherTimer操作像其他操作一样被放置在Dispatcher 队列中。DispatcherTimer 操作何时执行取决于队列中的其他作业及其优先级。"
【讨论】: