问题标签 [dispatchertimer]

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 投票
2 回答
211 浏览

wpf - 秒表没有停止

我想控制用户在用鼠标单击时是单击还是双击。所以我使用这段代码:

_dt 是在视图模型的构造函数中创建的 DispatcherTimer:

但是,由于调度程序没有停止,因此始终执行一键式代码。

为什么?。

谢谢。

编辑:我包括按钮的 axml:

0 投票
3 回答
1692 浏览

c# - DispatcherTimer 不断增加内存使用量,直到应用程序崩溃

我目前正在编写一个应用程序,主要使用 DispatcherTimer 来模拟秒表功能。当我的 DispatcherTimer 在应用程序中运行时,我的应用程序的内存使用量在不到 10 分钟内上升到 100MB,考虑到应用程序的功能是多么简单,这尤其奇怪。这通常不会成为问题,除非应用程序的内存使用量迅速增加然后导致它崩溃并关闭。我浏览了整个网络,并反复遇到承认存在 DispatcherTimer 内存泄漏的文章,但是针对此内存泄漏的所有修复都包括在不再需要 DispatcherTimer 时停止它。我的内存泄漏是在仍然需要 DispatcherTimer 时发生的,而不是在它意外运行时发生的。我需要允许用户让他们的秒表保持他们选择的运行时间,因此当不再需要 DispatcherTimer 时停止它对我没有多大作用。我尝试在 TimerTick 事件处理程序的末尾添加 GC.Collect() ,但是,这似乎也没有多大作用。

这是我的 TimerTick 事件处理程序和一些 MainPage 构造函数,事件处理程序中存在的文本框显示从启动秒表经过的时间。我在这里做了什么特别错误的事情导致内存如此巨大的增加吗?我以前认为这个问题是因为默认情况下 TextBox 会以某种方式缓存它们以前的内容,再加上由于秒表功能而导致的文本快速变化,但是,在从我的应用程序中完全删除 TextBox 并对其进行分析之后,我很确定它们是不是问题。如上所述,在 TimerTick 处理程序的末尾添加 GC.Collect() 并没有减少我的内存使用量。有没有人知道我可以如何使用 DispatcherTimer 减少内存使用量,也许是通过某种方式操纵 GC 函数来实际工作?

提前致谢!

0 投票
2 回答
1191 浏览

c# - 为什么“暂停”按钮在此秒表计时器中不起作用?--Windows Phone 应用开发

我不知道为什么这个暂停按钮在这里不起作用。我的秒表类也没有 Restart 方法,所以我想通过结合“reset and start”来编写它。还有什么想法吗?或者关于如何使这个暂停按钮起作用的任何想法?

谢谢。PS:我的 .NET 版本是“版本 4.5.50709”Microsoft Visual Studio Express 2012 for Windows Phone。根据此链接,我们应该在 Stopwatch 类中有一个 Restart 方法,但我的却没有!

0 投票
1 回答
278 浏览

wpf - 系统恢复工作后 WPF DispatcherTimer 抛出异常

假设您像这样创建一个 DispatchTimer:

现在您的系统进入睡眠状态或暂停工作。系统恢复工作后,代码会抛出 NullPointerException。为了避免这种情况,我注册了一个活动SystemEvents.PowerModeChanged += SystemEventsOnPowerModeChanged;

使用以下代码:

但这并不能解决问题。异常称为“UpdateTimerOnTick”方法为空。任何好主意如何防止这种行为?

0 投票
1 回答
547 浏览

c# - 实时更新大量对象(1,000+)的最有效方法

迭代具有大量项目(1,000 或更多)的集合并实时更新项目属性的最有效方法是什么?目前,我的程序在画布上为集合中的每个对象绘制一个图像WriteableBitmap(尽管我没有看到一个简单的椭圆之间的性能有任何差异)并将其移动到屏幕上。我试图暂时使逻辑尽可能简单。

(在上面的 Entity 类中,[Magic] 属性在我的所有属性上实现了 INPC)

我尝试使用System.Timers.TimerSystem.Threading.TimerSystem.Threading.DispatcherTimer创建一个具有不同间隔的循环。在我收集到大约 800 个对象之前,它们都表现得相当好,然后它们开始变得不稳定。我也尝试过使用标准foreach循环和Parallel.ForEach循环,并没有真正注意到两者之间的区别。我的循环有更复杂的逻辑,但在我弄清楚如何简化流程之前,我已经让它尽可能简单:

(此外,这不是 Canvas 的问题;如果我画了 10 个项目并在没有图像的情况下制作了 1000 个项目,它仍然会变得不稳定。)

我可以做些什么来让我的程序更有效地实时处理大型集合?我猜我错过了很多东西,因为这是我第一次处理这种性质的事情。任何建议将不胜感激。

0 投票
2 回答
1775 浏览

c# - 在 C# 中重置非活动时间的计数

我找到了这篇文章并创建了一个类,用它来检测非活动时间,效果很好。我将它设置为一分钟,一分钟后我可以让它“做事”。我想做的只是每隔“x”分钟的非活动时间做一些事情;即,如果事情一直处于非活动状态,则每 5 分钟执行一次,并且不要再次重复,直到 X 时间过去。

现在,我可以将计时器设置为每 5 分钟而不是每秒触发一次,但我希望能够“重置”非活动时间的计数。有什么建议么?

这是为了DispatchTimer在 C# 和 WPF 中使用。

0 投票
1 回答
604 浏览

c# - BackgroundWorker e.Result 导致调用线程无法访问错误

我已经阅读了很多与 BackgroundWorker 和 DispatcherTimer 相关的 SO 问题,并了解您无法在主线程以外的任何线程上访问 UI 组件。

所以我有 DispatcherTimer 每 1/2 秒滴答一次。正如您所期望的那样,我可以更新视图模型类和任何需要直接操作的 UI 元素,并且 UI 响应非常灵敏。但是,我需要根据 UI 上的值进行计算,运行时间约为 3 秒。

我尝试在 DispatcherTimer 线程中进行计算,并锁定/阻止 UI 直到它完成。目前,我在 DispatcherTimer 中进行了检查,然后触发 BackgroundWorker 线程开始执行计算。我使用 e.Arguments 向我的 3 秒计算过程传递它需要的数据,并使用 e.Result 传递我返回的完整数据。

我检查了结果,没有产生错误。但是,当我将 e.Result 投射回我的班级时,e.Result 无法正确评估。当我开始使用类属性时,我基本上得到了“调用线程无法访问错误”。

当我在“threadDrawMap_Completed”中设置中断并评估 PathGeometry 列表时,我收到此错误:base {System.SystemException} = {“调用线程无法访问此对象,因为不同的线程拥有它。”}

在我使用 DrawUIMap 方法并尝试访问 MyClass.MapGeo 几何列表之前,我实际上并没有看到错误。此时我又回到了可以访问 UI 的 DispatcherTimer 线程。

据我所知,就访问 UI 组件的位置/时间而言,我已经完成了所有工作。虽然我认为我在某处做了一些可怕的错误。

**编辑:这是进行计算的代码的一部分

0 投票
2 回答
3224 浏览

c# - DispatcherTimer 在控制台中不起作用

我很好奇为什么调度程序计时器在控制台模式下不起作用。我创建了一个简单的警报,它会在计时器达到其限制时执行某些操作。

您可以在 UnitTest 或控制台模式下使用调度程序计时器吗?DailyAlarm 在我以表格形式运行时有效。

这是我调用计时器的代码

这是我的计时器代码

0 投票
1 回答
1210 浏览

c# - .net DispatcherTimer 反复触发滴答事件

我的代码中有问题,我什至无法理解。

这是我的物品界面;

这是我的播放器:

第一个列表播放没有问题,但在第二轮 DispatcherTimer 不等待我的持续时间值,并立即触发完成事件。我做错了什么?谢谢。

0 投票
3 回答
176 浏览

c# - AudioPlaybackAgent 中的计时器

我有一个使用BackgroundAudioPlayer.

我需要音频播放代理中的计时器,它将更新从 Internet 广播电台的 API 中提取的 BAP 的当前播放曲目的曲目标题。

将 a 添加DispatcherTimer到音频播放代理中会给我一个跨线程异常,并使用:

没用。

我需要这里的代码,因为如果我将更新代码放在应用程序本身中,当用户离开应用程序时更新停止(与 Windows 8 的行为非常不同)。

我不能使用计划代理,因为它们每 30 分钟运行一次(IIRC)。

这是可能的还是不能在 Windows Phone 上完成?