Tag: 计时器

计时器在交叉线程中不起作用

我的表单中有2个全局System.Windows.Forms.Timer 。 两者都在表单的构造函数中初始化。 但尚未开始。 构造函数启动一个新线程 ,该线程启用并启动两个计时器。 显然它是所有交叉线程 ,但它不会抛出任何跨线程exception。 但它甚至不起作用。 它不会触发Timer.Tick方法。 这是代码: 第一种方法: 在表单构造函数中: KeepMeAliveTimer = new Timer(); //timer 1 KeepMeAliveTimer.Interval = 15000; KeepMeAliveTimer.Tick += KeepMeAlive; timer1 = new Timer(); //timer 2 timer1.Interval = 15000; timer1.Tick += timer1_Tick; //started a new thread 在新的thead: //after performing some tasks, it enables the timers KeepMeAliveTimer.Enabled = true; //timer 1 […]

调度任务以供将来执行

我查看了Task和Timer类API,但无法找到有关如何安排Task以供将来执行的信息。 使用Timer类,我可以调度线程以供将来执行,但我需要安排Task 。 Task有.Delay(…)方法,但不确定延迟与调度类似。 编辑(澄清):我想在x分钟后启动任务。

如果第二次调用线程计时器,则重置线程计时器

我正在尝试创建一个触发器发生的系统,使门打开5秒钟,然后再次关闭。 我正在使用Threading.Timer,使用: OpenDoor(); System.Threading.TimerCallback cb = new System.Threading.TimerCallback(OnTimedEvent); _timer = new System.Threading.Timer(cb, null, 5000, 5000); … void OnTimedEvent(object obj) { _timer.Dispose(); log.DebugFormat(“All doors are closed because of timer”); CloseDoors(); } 当我打开某个门时,计时器启动。 5秒后,一切都再次关闭。 但当我打开某扇门时,等待2秒,然后打开另一扇门,一切都在3秒后关闭。 如何“重置”定时器?

完成运行后如何停止计时器?

我有一个控制台应用程序,在main方法中,我有这样的代码: Timer time = new Timer(seconds * 1000); //to milliseconds time.Enabled = true; time.Elapsed += new ElapsedEventHandler(time_Elapsed); 我只想让计时器运行一次所以我的想法是我应该在time_Elapsed方法中停止计时器。 但是,由于我的计时器存在于Main()中,我无法访问它。

C#如果超过2秒钟,如何停止方法?

以下程序将连接到网络并获取“msnbc.com”网页的html内容并打印出结果。 如果从网页获取数据需要的时间超过2秒,我希望我的方法停止工作并返回。 你能告诉我怎样才能举一个例子吗? public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { gethtml(); MessageBox.Show(“End of program”); } public void gethtml() { HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create(“http://msnbc.com/”); WebResponse Response = WebRequestObject.GetResponse(); Stream WebStream = Response.GetResponseStream(); StreamReader Reader = new StreamReader(WebStream); string webcontent = Reader.ReadToEnd(); MessageBox.Show(webcontent); } }

仅使用Timer一次

我想在主表单初始化后的1秒内只使用一次计时器。 我认为以下会有一个消息框说“Hello World”只有一次,但实际上每隔一秒就会出现一个新的消息框“Hello World”。 为什么这样? 我把t.Stop()放在了tick事件中。 另外,我是否需要以某种方式处理计时器以避免内存泄漏? Timer t = new Timer(); t.Interval = 1000; t.Tick += delegate(System.Object o, System.EventArgs e) { MessageBox.Show(“Hello World”); t.Stop(); }; t.Start(); 请帮助并显示是否有更好的方法吗? 谢谢。

在C#中同步闪烁标签

我创建了一个Forms.Label类,派生自Forms.Label ,它有一个Forms.Timer ,允许我启用和禁用闪烁效果。 我创建了4个BlinkingLabel类型的标签,我的问题是如果所有4个标签在不同时间闪烁,则闪烁效果不会同步。 如何以一种方式调整我的设计,即使标签在不同时间闪烁,闪烁也会同步? *******编辑******我添加了以下代码,但我仍然无法让标签1和2同时闪烁。 我要做的是测试以下内容:make label1闪烁然后我点击按钮使标签2闪烁并且它们不同步。 知道自己做错了什么吗? public partial class UserControl1 : UserControl { Timer blinkTimer; Color blinkingColor = Color.Red; int interval = 300; bool flag1 = false; bool flag2 = false; public UserControl1() { InitializeComponent(); // Blinking abel default values this.blinkTimer = new Timer(); this.blinkTimer.Interval = interval; ; this.blinkTimer.Tick += new System.EventHandler(timer_Tick); […]

如何制作一个C#计时器来触发主线程中的事件?

长话短说,我需要.Net中的精确计时器 – 精确到毫秒 – 这意味着,如果我告诉它在10ms通过时触发事件,它必须这样做,+ -1ms。 内置的.Net Timer类似乎具有+ -16ms的精度,这对我的应用来说是不可接受的。 我发现这篇文章http://www.codeproject.com/Articles/98346/Microsecond-and-Millisecond-NET-Timer ,它提供了一个完全符合我需要的计时器代码(甚至更多 – 具有精确度,以微秒为单位) 。 但问题是,OnTimer等效似乎是在另一个线程中执行的。 所以,如果我添加一些代码,请说: label1.Text = “Hello World”; 我会得到一个例外,因此我必须像这样写它: Invoke( new MethodInvoker(() =>{label1.Text = “Hello World”;})); 根据我的理解,这是因为OnTimer事件是从计时器的线程触发的 – 时间过去直到有足够的时间超过Interval,然后触发下一个OnTimer事件。 .Net Timer没有这样的问题 – 在.Net Timer的OnTimer中,我可以自由地修改控件的成员。 问题:我应该更改什么,以便我的计时器将在主线程中运行它的OnTimer事件? 添加“Invoke”是唯一的选择吗?

替代Thread.Sleep在Windows窗体中除了Timer

我在Windows窗体C#中使用Thread.Sleep。 使用哪个导致没有响应表格。 使用Timer也不符合我的目的。 示例代码: if(……) // There are many if with difrent components and many Thread.sleep { button.visible=true; Thread.sleep(1000); GotoMeasurementMode(3000); Thread.sleep(3000); query(device.Text); Thread.sleep(7000); StopMeasurement(); Thread.sleep(4000); } 使用上面的代码导致forms无响应。 使用Timer会产生嵌套计时器。 在我的情况下并不是可怜的。 请告诉我windows窗体的替代方案。 想要命令之间的特定暂停。

Windows服务中的多个线程

我有一个Windows项目和一个表格,每5秒有一个计时器。 它从请求命名表时间和条件方式调用和处理方法。 但我有一些方法类型需要花费太多时间来响应并希望这些方法在单独的线程中。 这样我就可以在单独的线程和同步中运行这两种请求类型。 如何使用线程 – 多异步线程将它们分开?