Tag: 定时器

与System.Windows.Forms.Timer不一致的间隔

请善待,我只是学习C#并从前员工inheritance这个应用程序是我的第一个C#项目。 我正在使用System.Windows.Forms.Timer观察不一致和缓慢的时期。 该应用程序使用MS Visual Studio以C#编写。 定时器设置为100毫秒的间隔,但我观察的时间范围是110毫秒到180毫秒。 我正在使用几种工具来观察这一点,包括: – 一个SW示波器(Iocomp.Instrumentation.Plotting.Plot包), – 一个真实的示波器, – 让定时器运行一段时间,并将滴答数* 100毫秒与两者相比较系统时间和秒表。 在所有情况下,我观​​察到在最初几秒内变得明显的10%滞后。 每次滴答执行的方法运行时间不到4毫秒。 也没有耗时的异步处理。 但这应该无关紧要,因为计时器滴答是一个中断,而不是添加到事件处理程序队列的事件(据我所知)。 以前有没有人遇到这样的问题? 根本原因是什么? 谢谢。

两个不同间隔的定时器C#Form

我正在尝试用c#forms创建一个聊天,我创建了两个定时器; 其中一个是每1秒检查一次,如果有人写了什么,另一个是每1秒发送一条消息“我在线”或“我离线”取决于我设置的内容; 问题是,即使我做了一个不再显示垃圾邮件的if,我也发送了太多垃圾邮件; 但问题是,即使我没有看到消息,聊天也是滞后的,我的意思是更多的时间我让它打开更多滞后它…例如,如果我从另一个控制台写一条消息,我会在30秒后看到它如果让它打开,时间会增加。 所以我试着改变发送“ON”或“OFF”的定时器的间隔为1分钟,但是当我尝试启动程序它崩溃时,它只有在定时器具有相同的间隔并且我不明白时才有效为什么,我正在寻找解决方案…… 我的问题是我想要不同的时间间隔,当我做程序崩溃时,它会冻结……它不会在任何时候工作。 – >我想让检查计时器默认为100毫秒,并将状态发送器计时器设置为60000(1分钟); 但如果我这样做,程序会冻结; 它不会给我一个错误,但我不能再做任何事了。 计时器初始化: private void Form1_Load(object sender, EventArgs e) { ControlTimerInbox.Enabled = true; ControlTimerInbox.Start(); StatusTimer.Enabled = true; StatusTimer.Start(); } 这个用于控制定时器: private void ControlTimerInbox_Tick(object sender, EventArgs e) { mesric = Encoding.ASCII.GetString(receive.Receive(ref ipremoto)); if (mesric.Contains(“OFF!”)==true) { if (mesric.Contains(“GruppoUno”) == true) { GruppoUnoStatusPicture.BackgroundImage = Image.FromFile(@”.\tvchat\statusoff.jpg”); GruppoUnoLblStatus.ForeColor = Color.Red; } else […]

如何在C#中启用此计时器?

我已经开始了一个c#的课程,我不能让我的计时器运行。 它可能很简单,我在这里错过了一些东西。 基本上我有一个按钮来启动和停止红绿灯序列。 我希望间隔1秒。 这是我写的。 按下开始时,它无法正常工作。 谢谢。 } public int counter = 0; private void rbStart_CheckedChanged(object sender, EventArgs e) { counter++; if (counter == 1) { pbRed.Visible = true; pbAmber.Visible = false; pbGreen.Visible = false; } else if (counter == 2) { pbRed.Visible = true; pbAmber.Visible = true; pbGreen.Visible = false; } else if (counter […]

C#,System.Timers.Timer,每15分钟与系统时钟同步运行

如何让System.Timers.Timer每15分钟触发一次与系统时钟同步的Elapsed事件? 换句话说,我希望它完全触发xx:00,xx:15,xx:30,xx:45(其中xx表示任何小时)

等待n秒,然后下一行代码没有冻结forms

嗨我想找到一个等待几毫秒的方法,然后再转到下一行代码, 我已经研究过Thread.Sleep,但这会冻结主窗体,我希望它保持活跃状态​​。 我尝试了定时器和秒表,当他们勾选时应该发布到控制台时冻结主表单。 我找不到在我想要的等待中使用task.delay或后台工作者的方法。 伪代码: Wait 2 – 6 seconds Log “waiting” Log “waiting” Log “waiting” Stop Waiting – Run next line of code. 我尝试过的方法只是冻结表单并在之后填充日志,我只想要一个简单的等待方法而不冻结表单而不必处理被调用的事件,这意味着下一行不会运行。 任何帮助都会很棒,因为我还是c#的新手并且它让我有点生气:(

我们如何降低myProcess.TotalProcessorTime的分辨率?

我正在使用TotalProcessorTime通过cpu中的方法来测量时间。 for(int i=0;i<10;i++){ double s = Process.getCurrentProcess().TotalProcessorTime; primeNumber(500); //return the 500 primenumber doube e = Process.getCurrentProcess().TotalProcessorTime; Console.writeLine(es); } 输出如下:0 15,0001 15,0001 0 32,0002 0 15,0001 0 15,0001 因此所有输出都是多达到15,6001,分辨率非常高。 那么我们如何才能将此分辨率降低到1,2,6,5,2等值? 为什么对于相同的代码,它给出了不同的值0 15,6001 32,0002?

System.Threading.Timer vs System.Threading.Thread.Sleep resolution – .NET Timer不使用系统时钟分辨率

问题:尽管OS时钟分辨率更精确,为什么System.Threading.Timer保持15ms的分辨率? 在没有繁忙的CPU等待的情况下,实现1ms定时事件解析的可行方法是什么? 再次强调: 在我的情况下,系统计时器的分辨率为1ms (与建议重复的问题相反)。 所以这不是系统计时器分辨率的问题。 因此,在所谓的重复问题中没有有用的信息。 背景:似乎.NET System.Threading.Timer 没有使用系统时钟分辨率 – 它保持了~15ms的分辨率。 尽管OS时钟(例如Sleep分辨率)更加精确。 在我的盒子上(当几乎空闲并且有4个核心可用时): >Clockres.exe ClockRes v2.0 – View the system clock resolution Copyright (C) 2009 Mark Russinovich SysInternals – www.sysinternals.com Maximum timer interval: 15.625 ms Minimum timer interval: 0.500 ms Current timer interval: 1.001 ms 输出我的快速测试: Sleep test: Average time delta: 2[ms] (from 993 […]

C#为什么定时器频率非常低?

System.Timers.Timer和System.Threading.Timer以与请求的间隔大不相同的方式触发。 例如: new System.Timers.Timer(1000d / 20); 产生一个每秒发射16次而不是20次的计时器。 为了确保没有太长的事件处理程序的副作用,我写了这个小测试程序: int[] frequencies = { 5, 10, 15, 20, 30, 50, 75, 100, 200, 500 }; // Test System.Timers.Timer foreach (int frequency in frequencies) { int count = 0; // Initialize timer System.Timers.Timer timer = new System.Timers.Timer(1000d / frequency); timer.Elapsed += delegate { Interlocked.Increment(ref count); }; // Count […]