Silverlight在特定时间安排活动
我试图找到一种方法来触发Silverlight事件在一天中的特定时间发生。应用程序将在浏览器中用完,并且将一直运行。我发现了一些方法,使用计时器每分钟触发一个事件,然后检查是否是正确的时间做某事,但这听起来很混乱。是否有某种方式可以在2010年9月23日上午10:34启动活动?我不相信Silverlight中有这样的功能。如果您不喜欢轮询方法,您可以随时获取DateTime.Now和目标时间之间的差异,并为该时间设置计时器。虽然我不知道这有多可靠。我不知道有任何控件可以满足您的要求。以下是我熟悉的计时器:Silverlight在特定时间安排活动,silverlight,events,scheduling,Silverlight,Events,Scheduling,我试图找到一种方法来触发Silverlight事件在一天中的特定时间发生。应用程序将在浏览器中用完,并且将一直运行。我发现了一些方法,使用计时器每分钟触发一个事件,然后检查是否是正确的时间做某事,但这听起来很混乱。是否有某种方式可以在2010年9月23日上午10:34启动活动?我不相信Silverlight中有这样的功能。如果您不喜欢轮询方法,您可以随时获取DateTime.Now和目标时间之间的差异,并为该时间设置计时器。虽然我不知道这有多可靠。我不知道有任何控件可以满足您的要求。以下是我熟悉
- System.Threading.Timer(间隔)-生成重复事件(纯数字计时,无需UI更新)
- System.Windows.Threading.Dispatchermer(..)-在线程上下文(WPF/Silverlight)中使用
- System.Windows.Forms.Timer()-使用Windows窗体消息循环(主UI线程中的WinForms)
编辑::“计时器不保证在时间间隔发生时准确执行,但保证在时间间隔发生前不执行。这是因为操作与其他操作一样放置在队列上。Dispatchermer操作的执行时间取决于队列中的其他作业及其优先级。”感谢您的响应。我仍然没有找到任何东西,但最终使用情节提要作为计时组件,因为Dispatchermer与UI在同一线程中运行,而情节提要则没有 你可以在这里阅读更多关于两者比较的内容
如果您想让计时器在应用程序重新启动后继续运行,我建议您使用轮询并将计划任务持久化到某个地方
否则,只需将timer interval设置为当前时间和计划时间之间的timespan。A
timer
是这项工作的工具,我看不出有任何理由认为它比任何其他方法更不可靠。通过一个简单的代码示例,这个答案将得到极大的增强。计时器适用于短时间间隔,因此我不确定这是否会起作用要准确。见我的帖子。你提到了长时间间隔的准确性。当然,最好的情况是先等待一个长时间间隔(比所需时间短一点,即允许最大的已知错误),然后以较小的间隔开始轮询,直到到达时间为止?@够了:当然,你可以这样做。这完全取决于你想在构建解决方案上投入多少时间。每30秒一次滴答不会占用你的CPU。我运行了一些测试,并且Dispatchermer在没有太多其他事情发生时相当准确。之后不需要轮询好的。你没有理由在意计时器在UI线程上运行,因为你不需要高分辨率或一致性。故事板可能需要每10毫秒运行一次,这是Dispatcher无法做到的。但是你需要一分钟或一秒的分辨率,而不是毫秒,所以它应该与你无关。