Tag: 计时器

如何使用线程或计时器从WPF客户端应用程序定期执行方法

我正在开发一个WPF客户端应用程序。这个应用程序定期向webservice发送数据。 当用户登录应用程序时,我希望每5 mts运行特定方法将数据发送到.asmx服务。 我的问题是我是否需要使用线程或计时器。这个方法执行应该在用户与应用程序交互时发生。 即在此方法执行期间不阻止UI 要查找的资源是什么?

定时器,事件和垃圾收集:我错过了什么?

请考虑以下代码: class TestTimerGC : Form { public TestTimerGC() { Button btnGC = new Button(); btnGC.Text = “GC”; btnGC.Click += (sender, e) => GC.Collect(); this.Controls.Add(btnGC); System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer(); tmr.Interval = 1000; tmr.Tick += (sender, e) => this.Text = DateTime.Now.ToString(); tmr.Start(); } } 如果我没有弄错,在tmr变量超出范围之后, Timer不会在任何地方被引用,因此它应该有资格进行垃圾回收。 但是当我点击GC按钮时,计时器继续运行,所以我猜它没有被收集…… 有没有人对此有解释? PS:当然,这不是一个真正的程序,我只是想向别人certificate一点…但我的证据不起作用;)

使用Timer在C#中更新UI

我正在努力使我的应用程序从串行端口读取数据并更新UI上的仪表更高效,我想要求我处理UI更改的代码的一些建议。 我有一个定时器设置来检查发送到COM端口的数据和另一个定时器,它使用从COM端口接收的变量更新UI。 基本上发生的事情是我正在旋转仪表。 这是我处理图形的代码…… void timer_Tick(object sender, EventArgs e) //Timer regulates how often the gauge is updated on the UI { if (pictureBox1.Image != null) pictureBox1.Image.Dispose(); // dispose old image (you might consider reusing it rather than making a new one each frame) Point test = new Point((int)_xCor, (int)_yCor); Image img = new Bitmap(400, 400); […]

System.Timers.Timer在调用timer.Stop()之后执行Elapsed事件

背景:我有一个计时器,用于跟踪自触发serialPort DataReceived事件以来已经过了多长时间。 我正在创建自己的解决方案,而不是使用内置的超时事件,因为我得到一个连续的数据流,而不是发送查询和获得一个响应。 问题:在DataReceived处理程序中,我有一个语句来停止计时器,以便不会过去。 问题是很多时候它仍然执行Elapsed处理程序后跟。 我已经读过可以使用SynchronizingObject来解决这个问题,但我不知道如何实现这一点。 这是我的代码:我试图删除我认为不相关的所有内容。 private System.Timers.Timer timeOut; private System.Timers.Timer updateTimer; public void start() { thread1 = new Thread(() => record()); thread1.Start(); } public void requestStop() { this.stop = true; this.WaitEventTest.Set(); } private void record() { timeOut = new System.Timers.Timer(500); //** .5 Sec updateTimer = new System.Timers.Timer(500); //** .5 Sec timeOut.Elapsed += TimeOut_Elapsed; […]

带有计时器的.NET Windows服务停止响应

我有一个用c#编写的Windows服务。 它内部有一个计时器,可以定期激活一些function。 所以我服务的骨架: public partial class ArchiveService : ServiceBase { Timer tickTack; int interval = 10; … protected override void OnStart(string[] args) { tickTack = new Timer(1000 * interval); tickTack.Elapsed += new ElapsedEventHandler(tickTack_Elapsed); tickTack.Start(); } protected override void OnStop() { tickTack.Stop(); } private void tickTack_Elapsed(object sender, ElapsedEventArgs e) { … } } 它工作了一段时间(如10-15天)然后停止。 我的意思是服务显示为正在运行,但它没有做任何事情。 我做了一些日志记录,问题可能是计时器,因为在间隔之后它不会调用tickTack_Elapsed函数。 […]

定时器可以自动收集垃圾吗?

当你使用一个Timer或一个只运行整个程序生命周期的Thread ,你是否需要保留对它们的引用以防止它们被垃圾收集? 请不要理会下面的程序可以将timer作为类中的静态变量,这只是一个展示问题的玩具示例。 public class Program { static void Main(string[] args) { CreateTimer(); Console.ReadLine(); } private static void CreateTimer() { var program = new Program(); var timer = new Timer(); timer.Elapsed += program.TimerElapsed; timer.Interval = 30000; timer.AutoReset = false; timer.Enabled = true; } private void TimerElapsed(object sender, ElapsedEventArgs e) { var timerCast = (Timer)sender; Console.WriteLine(“Timer […]

.Net中的计时器和循环是否准确?

在开发一个程序来计算由555定时器IC产生的脉冲的频率和脉冲宽度时,通过PC并行端口进入PC。 我注意到每次运行代码时都显示不同的值,所以我开始测试循环和定时器的准确性。 我运行了以下代码,并指出它们不准确(我可能错了,请纠正我,如果我是!): 对于计时器: int sec = 0; private void button2_Click(object sender, EventArgs e) { sec = DateTime.Now.Second; i = 0; timer1.Enabled = true; } private void timer1_Tick(object sender, EventArgs e) { if (sec == DateTime.Now.Second) { i++; } else { timer1.Enabled = false; MessageBox.Show(i.ToString(),”Timer Output”); } } 输出:应该相同,但是: 对于LOOP: private void button1_Click(object sender, EventArgs […]

C#中的高分辨率计时器

是否存在高分辨率计时器,每次计时器过去时都会引发事件,就像System.Timer类一样? 我需要一个高分辨率的计时器来消除每一个ms。 我一直在讨论秒表可以测量高分辨率的post,但我不想测量时间,我想创建一个1毫秒的间隔。 在.NET中有什么东西,还是我要编写自己的高分辨率计时器?

.NET中最准确的计时器?

运行以下(略微伪)代码会产生以下结果。 我对计时器的真空程度感到震惊(每个Tick增加~14ms)。 那里有更准确的东西吗? void Main() { var timer = new System.Threading.Timer(TimerCallback, null, 0, 1000); } void TimerCallback(object state) { Debug.WriteLine(DateTime.Now.ToString(“ss.ffff”)); } Sample Output: … 11.9109 12.9190 13.9331 14.9491 15.9632 16.9752 17.9893 19.0043 20.0164 21.0305 22.0445 23.0586 24.0726 25.0867 26.1008 27.1148 28.1289 29.1429 30.1570 31.1710 32.1851

以高分辨率间隔/计时器提升事件

我想使用c#使用最高分辨率计时器。 例如,我想每11个时钟提出一个事件(我听说嘀嗒是pc中最高的计数器)。 我试过计时器,发现最小经过时间以毫秒为单位。 我看了秒表,但秒表不会引发事件。 谢谢。