Silverlight在特定时间安排活动

时间:2010-10-15 06:40:53

标签: silverlight events scheduling

我正在尝试找到一种方法来触发Silverlight事件在一天中的特定时间发生。该应用程序将在浏览器外运行,并将一直运行。我发现一些方法使用计时器每分钟触发一个事件,然后检查是否是正确的时间做某事,但这听起来很混乱。是否有某种方法可以在2010年9月23日上午10点34分举行活动?

4 个答案:

答案 0 :(得分:2)

如果您希望计时器在应用程序重启后继续存在,我建议使用轮询并在某处保留计划任务。

否则只需将计时器间隔设置为当前时间和预定时间之间的时间间隔。

答案 1 :(得分:0)

我不相信Silverlight中有这样的功能。如果您不喜欢轮询方法,您可以始终获取DateTime.Now与目标时间之间的差异,并为该长度设置计时器。虽然我不知道会有多可靠。

答案 2 :(得分:0)

我不知道有任何控制符合你的要求。以下是我熟悉的计时器:

  • System.Threading.Timer(interval) - 生成定期事件(没有UI更新的纯数字时序)
  • System.Windows.Threading.DispatcherTimer(..) - 在线程上下文中使用(WPF / Silverlight)
  • System.Windows.Forms.Timer() - 使用Windows窗体消息循环(主UI线程中的WinForms)

我认为您最好的选择是使用DispatcherTimer,间隔为30秒,然后将实际时间与预期的时间和日期相匹配。 从我记忆中来看,这些定时器用于小间隔,因此较大的间隔将不太准确。 (我在纠正中发言)

编辑MSDN remarks on timing:“定时器不能保证在时间间隔发生时完全执行,但保证在时间间隔发生之前不执行。这是因为{{与其他操作一样,操作放在DispatcherTimer队列上。当DispatcherTimer操作执行时,它依赖于队列中的其他作业及其优先级。“

答案 3 :(得分:0)

感谢您的回复。我仍然没有找到任何东西,但最终使用StoryBoard作为计时组件,因为DispatcherTimer在与UI相同的线程中运行,而StoryBoard则没有。

您可以在此处详细了解两者之间的比较。

http://blogs.silverlight.net/blogs/msnow/archive/2009/11/09/69731.aspx