Tag: 计时器

System.Timers.Timer生命周期

哪个是使用System.Timers.Timer的正确方法? 我的意思是……我创建了计时器,设置了间隔以及在Elapsed事件上调用的方法。 double ms = 1000; var t = new System.Timers.Timer(ms); t.AutoReset = false; t.Elapsed += (sender, e) => { runTask(); }; t.Start(); 接下来是什么? 是否应该在计时器上拨打电话? 我想我不能,或者Elapsed事件永远不会发生。 我应该在一些全局变量中注册Timer以避免丢失对它的引用,因此GC可以在调用Elapsed之前配置定时器吗? 如果是这样,一旦处理了Elapsed事件,我怎么能处理Timer(因此我的任务已被执行)?

.NET 3.5 C#Bug与System.Timer System.ObjectDisposedException:无法访问已处置的对象

在我的Windows服务应用程序中,我经常使用计时器。 我只使用System.Timers。 我之前从未遇到过这个问题,但突然间我得到了这个例外: System.ObjectDisposedException: Cannot access a disposed object. at System.Threading.TimerBase.ChangeTimer(UInt32 dueTime, UInt32 period) at System.Threading.Timer.Change(Int32 dueTime, Int32 period) at System.Timers.Timer.UpdateTimer() at System.Timers.Timer.set_Interval(Double value) at MyApp.MySpace.MySpace2.MyClassWithTimer.MethodChangeTimerInterval() 在我的方法中,我停止计时器,并更改计时器间隔。 那是我得到例外的地方。 我已经阅读了一些关于这个bug的内容但是即使在.NET 3.5中也存在这个bug仍然是可行的吗? 我如何解决它? 我应该在停止后更新计时器对象并将间隔设置为新对象吗? 我正在使用GC.KeepAlive(dataTimer); 编辑:我发现了一些关于这个问题的其他问题: *我找到了一个链接http://www.kbalertz.com/kb_842793.aspx基本上,一旦停止计时器,内部System.Threading.Timer就可用于垃圾收集,有时会导致经过的事件不发生,或者有时导致处置引用exception。 虽然没有在文章中描述,但我的解决方案是每次停止计时器时创建一个新计时器并重新添加已用事件。 不高效但容易,对我而言不是处理器问题。 这完全解决了我的问题。 为所有回复的人喝彩。* 但我很困惑为什么这个bug仍然存在,我需要确保重新添加计时器是一个好主意… 导致错误的代码: private void StartAsyncResponseTimer() { switch (_lastRequestType) { case 1: asyncResponseTimer.Interval = 1000; break; case […]

我该怎么用Sleep或Timer

我有两个使用计时器或使用睡眠的替代方案,我需要在这个方法完成后每隔3秒调用一个方法,我写了一个基本的例子来certificate我的意思: public static void Main() { new Thread(new ThreadStart(fooUsingSleep)).Start(); callToMethodAfterInterval(new Action(fooUsingTimer), 3000); } public static void fooUsingSleep() { Console.WriteLine(“Doing some consuming time work using sleep”); Thread.Sleep(3000); fooUsingSleep(); } public static void fooUsingTimer(object dummy, ElapsedEventArgs dummyElapsed) { Console.WriteLine(“Doing some consuming time work usning timer”); callToMethodAfterInterval(new Action(fooUsingTimer), 3000); } public static void callToMethodAfterInterval(Action inMethod, int inInterval) { […]

C#计时器自动停止一些滴答后停止

如何在经过一些滴答或之后停止计时器,比方说3-4秒? 所以我启动一个计时器,我希望在10个滴答之后或2-3秒后自动停止。 谢谢!

定时器关闭应用程序

如何制作一个计时器,强制应用程序在C#中的指定时间关闭? 我有这样的事情: void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { if (++counter == 120) this.Close(); } 但在这种情况下,应用程序将在计时器运行后的120秒内关闭。 我需要一个计时器,它将关闭应用程序,例如23:00:00。 有什么建议?

只有在前一个事件完成时才提出事件

我在我的应用程序中使用System.Timers.Timer 。 每一秒我都会运行一个能完成某项工作的function。 问题是,这个函数可以阻塞一段时间(它读取然后从磁盘处理一个大文件)。 我想只在前一个“执行实例”完成后启动该function。 我以为我可以用Mutex实现这个目标: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Timers; using System.Threading; namespace ConsoleApplication1 { class Program { static Mutex TimerMut = new Mutex(false); public static void Main() { Thread TT = new Thread(new ThreadStart(delegate() { System.Timers.Timer oTimer = new System.Timers.Timer(); oTimer.Elapsed += new ElapsedEventHandler(Handler); oTimer.Interval = 1000; oTimer.Enabled […]

请解释Timer事件async / await语法

我在这里和这里研究了asynch和await语法。 它真的有助于理解用法,但我在MSDN上找到了一个有趣的语法示例,我只是不明白。 问 :有人可以向我解释一下这个System.Timers.Timer事件注册的语法与asynch await:为什么你可以使用lambda表达式中已经存在的async await关键字? Timer timer = new Timer(1000); timer.Elapsed += async ( sender, e ) => await HandleTimer(); private Task HandleTimer() { Console.WriteLine(“\nHandler not implemented…” ); } 问题2:如果sender没有出现在HandleTimer方法中,那么sender和e的两个参数是什么?

每秒运行一次Visual C#

我有计时器的问题。 我在函数中有函数(在函数中绘制) void func(){ /*…do something … */ for(){ for() { /*loop*/ draw(A,B, Pen); } /*… do something …*/ } } 这是绘图function public void draw1(Point Poc, Point Kra, Pen o) { Graphics g = this.CreateGraphics(); g.DrawLine(o,Poc.X+4, Poc.Y+4,Kra.X+4, Kra.Y+4); g.Dispose(); } 我在按钮点击时调用函数’func’ private void button4_Click(object sender, EventArgs e){ func(); } 我想调用绘制函数evry second(每秒绘制一行)。 在绘图之间,函数需要继续工作并计算=循环,并绘制下一行一段时间(间隔)。 我试过了 timer1.Tick += […]

c#在特定时间显示标签中的文本

有人知道如何在标签或文本框中显示特定时间的文本吗? 假设如果我单击一个按钮,它会在标签的文本框中显示键入的文本15秒,然后它就会消失。

如何在c#中每隔几秒调用一个特定的方法?

“机器人游戏”是我开发的第一款基本游戏。 洋红色’#’角色是一个敌人,它应该在这张地图中随机移动,但它的随机移动速度太快我试图使用线程,但它会影响所有角色的速度。 现在,我需要每100毫秒调用一次“Enemy”方法。 机器人游戏图片: