问题标签 [system.timers.timer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
73 浏览

c# - 如何在使用片段和计时器的选项卡式活动上更新 UI

我有一个带有 3 个片段的选项卡式活动。第一个片段允许用户选择一个测试,第三个片段有一个计时器、一个文本视图和一些按钮。到目前为止,第二个片段中没有任何内容。

在片段 3 中,我有一个启动计时器的按钮,一旦启动计时器,textview 会每分钟刷新一次,显示经过的时间。到目前为止一切正常。

问题:一旦计时器启动,如果我选择片段 1 并返回片段 3,计时器将停止更新 textView。我知道 timer_elapsed 运行正常,只有 textview 没有更新。

我试过 FragmentActivity.RunOnUiThread(() => {}); 这工作正常,直到片段被切换。

我确实尝试使用 Loopers.MainLooper 来更新屏幕,但问题仍然存在。

我希望 textView 在片段切换并返回到片段 3 时继续正确更新

0 投票
0 回答
55 浏览

c# - Timers.Timer 超过 Interval 后继续工作

我声明这样的计时器列表:

并在循环中填写计时器列表:

并在另一个函数中启动计时器:

计时器完成后,我会在文本文件中看到下一个数据

定时器 0 添加于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 1 添加于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 2 添加于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 3 添加于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 4 添加于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 5 添加于:17.04.2019 20:04:13;定时器持续时间:4000
定时器 6 添加于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 7 添加于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 8 添加于:17.04.2019 20:04:13;定时器持续时间:3000
定时器 9 添加于:17.04.2019 20:04:13;定时器持续时间:5000
定时器 10 添加于:17.04.2019 20:04:13;定时器持续时间:4000
定时器 11 添加于:17.04.2019 20:04:13;定时器持续时间:8000

定时器 0 开始于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 1 开始于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 2 开始于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 3 开始于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 4 开始于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 5 开始于:17.04.2019 20:04:13;定时器持续时间:4000
定时器 6 开始于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 7 开始于:17.04.2019 20:04:13;定时器持续时间:2000
定时器 8 开始于:17.04.2019 20:04:13;定时器持续时间:3000
定时器 9 开始于:17.04.2019 20:04:13;定时器持续时间:5000
定时器 10 开始于:17.04.2019 20:04:13;定时器持续时间:4000
定时器 11 开始于:17.04.2019 20:04:13;定时器时长:8000

日期:17.04.2019 20:04:15;定时器 7 停在:17.04.2019 20:04:15
日期:17.04.2019 20:04:16;定时器 8 停在:17.04.2019 20:04:16
日期:17.04.2019 20:04:17;定时器 10 停在:17.04.2019 20:04:17
日期:17.04.2019 20:04:18;定时器 9 停在:17.04.2019 20:04:18
日期:17.04.2019 20:04:21;定时器 11 停在:17.04.2019 20:04:21
日期:17.04.2019 20:04:26;定时器 6 停在:17.04.2019 20:04:26
日期:17.04.2019 20:04:26;定时器 4 停在:17.04.2019 20:04:26
日期:17.04.2019 20:04:26;定时器 3 停止时间:17.04.2019 20:04:26
日期:17.04.2019 20:04:26;定时器 2 停止时间:17.04.2019 20:04:26
日期:17.04.2019 20:04:26;定时器 1 停在:17.04.2019 20:04:26
日期:17.04.2019 20:04:26;定时器 0 停在:17.04.2019 20:04:26
日期:17.04.2019 20:04:26;定时器 5 停止时间:17.04.2019 20:04:26

为什么间隔为 2 秒的计时器工作约 13 秒并最后停止?我的错误在哪里?

0 投票
2 回答
77 浏览

c# - 创建新计时器时,旧计时器会发生什么?

我继承了一些旧代码,在我看来,它的某些部分存在问题。

该程序使用 TCP/IP 与另一个程序通信,协议简单。发送命令电报并等待响应电报。

这是我认为有问题的部分。

每次发送命令电报时都会调用方法 SendAndWait。

我的问题是计时器的创建

这将创建一个新的计时器,但当前的计时器永远不会被释放,所以它会继续运行?最好的情况是它会停止。

什么是更好的?

  1. 将计时器的创建移动到只调用一次的方法?
  2. 处置当前计时器,然后在 SendAndWait 中创建一个新计时器?
0 投票
1 回答
246 浏览

c# - C# 定时器过早触发

当我调用方法 random_Start() 时,它首先起作用:第二次控制台打印出现在合理的时间,但随后控制台打印之间的差距变得越来越小。

在一些打印之后,几乎每次打印都在不到 5 秒的时间内完成,尽管代码应该将 Timer 设置为至少 5 秒,对吧?

0 投票
2 回答
133 浏览

c# - 为什么我的事件“myTimer_Elapsed”没有更新我设备上的标签?

如果有人问过这个问题,我很抱歉。我找不到这个问题的具体答案并且被卡住了。我现在正在学习计时器。我是一名 VBA 程序员,并涉足 C#。

我现在正在尝试编写一个跨平台应用程序,并且我的 myTimer.Elapsed 事件无法按预期更新标签。

我已阅读来自goalkicker.com 的C# 专业人士注释中的计时器章节,并尝试复制他们的倒计时计时器。我还阅读了 Microsoft API for Timer.Elapsed Event。两者都没有给我一个明确的答案,说明我哪里出错了。谷歌也不太友好,因为我可能查询不正确。

我尝试停止计时器,只允许该方法运行,直接在我的 Elapsed 方法中写入标签并在单独的方法中更新标签(如代码中所示)。

我的计时器事件正在触发,因为断点按预期被击中。正在调整 timeLeft 变量,已在即时窗口中验证。只是标签没有更新。

0 投票
3 回答
165 浏览

c# - C# - 计时器滴答声比指定的间隔更短,导致重复作业并行运行

我有一个每 4 分钟打勾的 Windows 服务。如果运行 DataImporter,则当计时器计时,DataImporter 有许多“作业”,它可以在每个计时运行,例如,有一个 ProcessData 作业和一个 RetreiveData 作业:

  • RetreiveData 作业将联系第 3 方 API 并将数据存储在数据库中以进行处理。
  • ProcessData 作业将从数据库中获取数据并将其处理到我们可用的数据库等中。

一旦 DataImporter 运行,它就会检查一个名为 ScheduledJob 的数据库表——它具有许多调度功能,例如 FrequencyInterval、ActiveStart/Stop 时间、StartedLastRun 时间。ScheduledJob 表有一个名为“InProgress”的标志,这个标志将停止 DataImport 在它已经运行时拾取该作业。

存在一个连续的问题,即一个作业被拾取两次,彼此相隔几秒钟,然后两者同时运行,这在尝试插入相同的记录时会导致许多数据库约束。我不太确定它如何同时选择两个工作,滴答声相隔 4 分钟,所以理论上它甚至不能查看潜在的工作,它怎么能同时运行它们相隔几秒?

RetrieveData 和 ProcessData 作业都需要能够并行运行,因此我无法在执行作业时暂停 Timer。

服务:

数据导入控制器:

编辑:

包括 Program.cs

0 投票
3 回答
137 浏览

c# - 在并行运行 2 个或更多任务时保留变量值

我正在使用计时器,并已将线程作为解决问题的第一步。我必须每 30 秒发送一次参考,每次单击按钮时都会创建此参考。所以我有以下代码:

以下是 MyReference 类:

编辑问题重点:

问题是它只发送最新的值someReference而忽略以前的值。如何在 30 秒后发送每个值而不用 someReference 的最新值替换它们?

0 投票
1 回答
170 浏览

c# - C# winform 两个定时器访问同一个变量

我是 C# 新手,我正在做一个项目,需要两个计时器同时访问同一个变量。(一个用于读取,另一个用于写入或更新)。所以,我的问题是我应该使用哪个 Timer?Forms.Timer 或 Thread.Timer。我读过一些关于它们区别的文章。由于我想使用这些计时器来更新程序的界面(图片框中的图像),所以我认为 Forms.Timer 应该在这里使用,因为它与 GUI 的东西有关。但是,哪个计时器首先执行的顺序也很重要,所以我认为 Thread.Timer 也应该考虑。有什么办法可以将它们组合在一起吗?

更新:我正在做一个心电图项目,所以基本上我一直在接收数据,我想把它们画在表格上。但是,由于绘制大约需要 40 毫秒,所以使用一个计时器会有延迟,但我需要实时。(例如,如果我将间隔设置为 100 毫秒,那么完成应该完成的一帧绘制需要 140 毫秒100 毫秒。这将导致每个滴答声延迟 40 毫秒。)因此,我的解决方案是在我收到数据时使用一个计时器更新数据缓冲区,并使用另一个计时器调用 Invalidate,这将重新绘制所有新数据。我应该使用 thread.timer 来更新数据并使用 form.timer 来重绘表单吗?

0 投票
1 回答
222 浏览

c# - 如何正确覆盖 System.Timers.Timer Elapsed Event

我想覆盖 System.Timers.Timer 类的默认 Elapsed 事件,以便能够在需要时轻松删除所有事件侦听器。使用 Jorge 对这个问题的回答,我想出了以下内容

当我运行正在执行的服务时,我可以跟踪查看是否分配了私有 Elapsed 成员。但是我无法看到事件处理程序实际执行。我设置正确了吗?

0 投票
1 回答
36 浏览

c# - 如果没有保存引用,SystemTimers.Timer 何时被视为垃圾?

我很想知道 System.Timers.Timer 何时被视为垃圾并因此被垃圾收集器收集,如果我不存储对它的引用,但它已启用。
但是在什么时候我的计时器被认为是垃圾?

考虑以下代码:

当我的代码触发更新时,此代码块将每两秒运行一次,然后在我的表单的下角添加一个星号,表示连接有效且良好。我创建了一个没有引用的计时器,它会在一秒钟后再次移除星星,自行停止并自行处理。