Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight在特定时间安排活动_Silverlight_Events_Scheduling - Fatal编程技术网

Silverlight在特定时间安排活动

Silverlight在特定时间安排活动,silverlight,events,scheduling,Silverlight,Events,Scheduling,我试图找到一种方法来触发Silverlight事件在一天中的特定时间发生。应用程序将在浏览器中用完,并且将一直运行。我发现了一些方法,使用计时器每分钟触发一个事件,然后检查是否是正确的时间做某事,但这听起来很混乱。是否有某种方式可以在2010年9月23日上午10:34启动活动?我不相信Silverlight中有这样的功能。如果您不喜欢轮询方法,您可以随时获取DateTime.Now和目标时间之间的差异,并为该时间设置计时器。虽然我不知道这有多可靠。我不知道有任何控件可以满足您的要求。以下是我熟悉

我试图找到一种方法来触发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)
我认为最好的办法是使用一个间隔30秒的调度器,然后将实际时间与预期时间和日期匹配。据我记忆所及,此类计时器适用于较小的间隔,因此较大的间隔将不太准确。(我在更正中发言)


编辑::“计时器不保证在时间间隔发生时准确执行,但保证在时间间隔发生前不执行。这是因为操作与其他操作一样放置在队列上。Dispatchermer操作的执行时间取决于队列中的其他作业及其优先级。”

感谢您的响应。我仍然没有找到任何东西,但最终使用情节提要作为计时组件,因为Dispatchermer与UI在同一线程中运行,而情节提要则没有

你可以在这里阅读更多关于两者比较的内容


如果您想让计时器在应用程序重新启动后继续运行,我建议您使用轮询并将计划任务持久化到某个地方


否则,只需将timer interval设置为当前时间和计划时间之间的timespan。

A
timer
是这项工作的工具,我看不出有任何理由认为它比任何其他方法更不可靠。通过一个简单的代码示例,这个答案将得到极大的增强。计时器适用于短时间间隔,因此我不确定这是否会起作用要准确。见我的帖子。你提到了长时间间隔的准确性。当然,最好的情况是先等待一个长时间间隔(比所需时间短一点,即允许最大的已知错误),然后以较小的间隔开始轮询,直到到达时间为止?@够了:当然,你可以这样做。这完全取决于你想在构建解决方案上投入多少时间。每30秒一次滴答不会占用你的CPU。我运行了一些测试,并且Dispatchermer在没有太多其他事情发生时相当准确。之后不需要轮询好的。你没有理由在意计时器在UI线程上运行,因为你不需要高分辨率或一致性。故事板可能需要每10毫秒运行一次,这是Dispatcher无法做到的。但是你需要一分钟或一秒的分辨率,而不是毫秒,所以它应该与你无关。