Tag: 计时器

定时器实现的数据绑定

无法弄清楚为什么这个计时器没有显示信息。 计时器被assembly到TimeEntry中更新TextBlock的方法。 绑定似乎不起作用,我不明白如何正确地做到这一点。 我看过MSDN网站。 他们只给出了基础知识:还不够。 码: TimeEntry.xaml.cs : public partial class TimeEntry : UserControl { public static readonly DependencyProperty timeSpentProperty = DependencyProperty.Register(“timeSpent”, typeof(TimeSpan), typeof(TimeEntry), new FrameworkPropertyMetadata(TimeSpan.Zero)); #region Properties public TimeSpan timeSpent { get { return (TimeSpan)GetValue(TimeEntry.timeSpentProperty); } set { SetValue(TimeEntry.timeSpentProperty, value); } } #endregion static TimeEntry() { } public TimeEntry(int id) { DataContext = this; […]

你如何在C#中运行同步计时器?

我正在编写一个应用程序,它使用计时器在某些事件发生时在屏幕上显示倒计时。 我想重用计时器,因为它对应用程序中的一些东西很方便,所以我指定了我想要围绕计时器的单词。 例如,以下函数调用: CountdownTimer(90, “You have “, ” until the computer reboots”); 会显示: You have 1 minute 30 seconds until the computer reboots 然后倒计时。 我使用以下代码: private void CountdownTimer(int Duration, string Prefix, string Suffix) { Countdown = new DispatcherTimer(); Countdown.Tick += new EventHandler(Countdown_Tick); Countdown.Interval = new TimeSpan(0, 0, 1); CountdownTime = Duration; CountdownPrefix = Prefix; CountdownSuffix […]

倒计时器会增加互动吗?

如果没有完成鼠标交互,我有一个表格要在5秒后关闭,但是如果完成任何鼠标交互,我希望它关闭countdown + 5 seconds ,每次交互都会增加5秒。 这是我到目前为止提出的: int countdown = 5; System.Timers.Timer timer; 启动计时器 timer = new System.Timers.Timer(1000); timer.AutoReset = true; timer.Elapsed += new System.Timers.ElapsedEventHandler(ProcessTimerEvent); timer.Start(); 事件 private void ProcessTimerEvent(Object obj, System.Timers.ElapsedEventArgs e) { –countdown; if (countdown == 0) { timer.Close(); this.Invoke(new Action(() => { this.Close(); })); } } 并且仅仅为了测试我使用表单mouseclick事件将倒计时增加5但是必须将其更改为另一个事件,因为如果您单击表单上的标签或任何其他控件,它将不会增加计时器。 private void NotifierTest_MouseClick(object sender, MouseEventArgs e) […]

了解C#中Timer控件的工作原理

假设我有一个定时器控件,间隔设置为20ms。 在这个控件里面,我正在做一些需要100ms才能完成的操作。 因此,一旦它执行该操作,Timer控件是否会再次执行而无需等待该操作完成? 或者直到该操作没有完成,Timer才会再次执行? 编辑 我在控制台应用程序的单独线程中使用System.Timers.Timer()。 我在下面与安德鲁讨论后编辑了我的问题。

使用线程时内存泄漏

我似乎在这段代码中有内存泄漏。 它是一个控制台应用程序,它创建了几个类(WorkerThread),每个类都以指定的时间间隔写入控制台。 Threading.Timer用于执行此操作,因此写入控制台是在单独的线程中执行的(TimerCallback在从ThreadPool获取的单独线程中调用)。 更复杂的是,MainThread类挂钩到FileSystemWatcher的Changed事件; 当test.xml文件更改时,将重新创建WorkerThread类。 每次保存文件时(每次重新创建WorkerThread和Timer时),任务管理器中的内存都会增加(内存使用情况,有时还会增加虚拟机大小); 此外,在.Net Memory Profiler(v3.1)中,WorkerThread类的未分配实例增加了两个(这可能是一个红色的鲱鱼,因为我已经读过.Net Memory Profiler有一个错误,它很难检测到处理class级。 无论如何,这是代码 – 有谁知道什么是错的? 编辑 :我已经将类创建移出FileSystemWatcher.Changed事件处理程序,这意味着WorkerThread类总是在同一个线程中创建。 我为静态变量添加了一些保护。 我还提供了线程信息,以更清楚地显示正在发生的事情,并使用Timer与显式线程交换; 然而,记忆仍然在泄漏! Mem Usage一直缓慢增加(这只是由于控制台窗口中的额外文本?),并且当我更改文件时VM大小增加。 这是代码的最新版本: 编辑当你写入它时,这似乎主要是控制台使用内存的问题。 显式编写的Threads仍然存在增加内存使用量的问题。 请参阅下面的答案 。 class Program { private static List threads = new List(); static void Main(string[] args) { MainThread.Start(); } } public class MainThread { private static int _eventsRaised = 0; private […]

了解多媒体计时器的奇怪行为

我在我的应用程序(C#.NET)中使用多媒体计时器来提高计时器的准确度并达到1 ms的计时器频率。 到目前为止,我的应用程序一直运行良好,直到最近它开始表现得很奇怪。 我试图了解我的申请有什么问题。 以下是采取的步骤 定时器频率设置为1 ms,每1ms调用一次回叫 有4个线程,每个线程创建自己的计时器对象。 它们都设置为在1ms后调用回调。 这些是个别实例,不共享。 旧的代码执行时间约为0.3毫秒。 这个工作正常,直到下一步。 应用程序代码已更改。 定时器回调函数现在需要大约1.2 ms才能执行。 这显然是个问题。 (我将在稍后优化代码。但现在我只想了解多媒体计时器行为) 只有第一个线程正在调用定时器回调,而对于其他线程,回调只被调用两次或三次,之后永远不会调用回调。 看起来对于其他线程,计时器甚至错过了(?),它无法赶上。 (它错过了每次中断)。 你能解释一下计时器对象的行为吗? 所有线程实际上都指向同一个计时器对象,因为它只有一个进程吗? 为什么其他线程没有调用定时器回调?

Windows服务定期生成一个最大的线程

我已经阅读了数百页并且现在使用了这么多样本,我完全感到困惑。 大多数示例似乎针对以下内容: 让一个计时器产生一个新的线程,它将完成一些工作,具有无限的线程 产生特定数量的线程,每个线程都有一个执行某些操作的计时器 做一些工作 我想要完成的是: 让计时器运行以定期生成一个线程 此线程可能需要或可能不会超过计时器滴答 限制可以生成多少个线程 线程完成后,将线程返回,以便再次使用 每个线程中的工作是彼此独立的,并且可以在异步中运行(这并不重要) 作为类比,我希望我的应用程序像一艘有10条钓鱼线的渔船一样工作。 在开始时你输出一个(按需),然后另一个,依此类推。 在任何给定时间,水中可以有0到10条钓鱼线。 每当捕获一条鱼时,线路就会被拉起并准备好再次施放(如果需要的话)。 听起来我应该使用ThreadPool? 我还认为为了保持简单,我应该生成一个线程,如果没有工作,立即返回它(即从某个表中选择count,如果count为0,则返回线程),而不是试图聪明地弄清楚如果我需要产卵,因为有需要。 一般情况下,当系统安静时,它将不断产生一个线程,看到没有工作然后返回,但在繁忙时间,线程可能会被使用到极限,系统将继续失败生成新线程,直到完成后再次返回一个或多个线程。 我已经尝试过System.Threading和Semaphores以及WaitHandles,但这一切都让人非常困惑。 我没有代码可以显示,因为我继续删除并重新开始,采用不同的方法。 任何帮助,将不胜感激。 我在C#2010开发。

WinForms中的计时器

我正在使用计时器来创建启动画面。 我想做的是使表单淡入淡出。 我开始在窗体的构造函数中创建窗体不透明度0,并通过在窗体加载方法中触发计时器。 现在在我的Timer_Tick方法中,我不断增加不透明度,比如0.2。 我想,一旦计时器达到其间隔的一半,我就会开始降低不透明度,但我无法做到这一点。 我不清楚计时器是如何工作的,但我想实现这样的事情: if(Whatever_Timer_Value_Is <= Interval/2) //Can't achieve this :s this.Opacity += 2; else this.Opacity -=2 ; 那么..有没有办法在任何时刻获得Timer的值? 或者还有其他方法吗? 请保持简单。 我只是个业余爱好者。 X(

注册计时器已过去的事件

我想创建一个初始化计时器的类,该计时器将用作其他类成员的中心核心,以便为计时器已用事件注册自己。 我的问题是我真的不知道如何将计时器已用事件暴露给其他类。 我认为可能有效的一个解决方案是,我只是将计时器公开为公共属性,它将返回计时器对象,我可以从该对象调用timer elapsed事件,例如: MyAppTimer appTimer = new MyAppTimer(); Timer timer = appTimer.GetAppTimer; timer.Elapsed += SomeMethod; 但是通过这个解决方案,我将暴露出我不想要的整个计时器。 如何传入MyAppTimer类中的方法,该方法将在内部使用计时器的已用事件注册该方法? 是否与代表有关? 也许是这样的: public void RegisterHandler(someStuffGoesHere) //What do I pass in here? { timer.Elapsed += someStuffGoesHere; }

wpf故事板死亡

C#: public partial class MainWindow : Window { Storyboard a = new Storyboard(); int i; public MainWindow() { InitializeComponent(); a.Completed += new EventHandler(a_Completed); a.Duration = TimeSpan.FromMilliseconds(10); a.Begin(); } void a_Completed(object sender, EventArgs e) { textblock.Text = (++i).ToString(); a.Begin(); } } XAML: 这段代码有什么问题? 故事板在20-50轮之后停止。 每次都有不同的号码