c# timer停止不了,请问如何解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# timer停止不了,请问如何解决相关的知识,希望对你有一定的参考价值。

下面是代码,检查一个进程,如果有就继续等待时间然后再检查,如果没有就启动一个进程,然后接着等到时间再检查,检查和等待还有启动都没问题,现在的问题是,有个按钮,点击停止timer,可是不管用,点击后,依然timer执行等待时间和检查,请问这个停止按钮该如何写
这一段是一个按钮点击开始计时的动做
private void button4_Click_1(object sender, EventArgs e)

button4.Text = ("监控中");
button4.Enabled = false ;
//到达时间的时候执行事件,周期为10秒;

System.Timers.Timer timer1 = new System.Timers.Timer(10 * 1000);
timer1.Elapsed += new System.Timers.ElapsedEventHandler(dz);
timer1.AutoReset = true; //设置一直执行(true)
timer1.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件
button5.Enabled = true;
这一段是到时间后的timer执行内容
public void dz(object source, System.Timers.ElapsedEventArgs e)

System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcesses();
bool isRunning = false;
foreach (System.Diagnostics.Process myProcess in myProcesses)

if ("test" == myProcess.ProcessName)

isRunning = true;
break;



if (!isRunning)

System.Diagnostics.Process.Start(@"D:\test\test.exe");



这个是那个停止按钮
private void button5_Click(object sender, EventArgs e)

timer1.Stop();
timer1.Enabled = false;
button5.Enabled = false;
button4.Enabled = true;
button4.Text = ("开始监控");



该如何改写才好呢,谢谢了

参考技术A timer的作用域不对,你是在button事件里创建的不能再外面用本回答被提问者采纳 参考技术B 建议在窗体上添加timer控件,而不是在事件中进行声明!

C# System.Threading.Timer如何停止

using System;
using System.Threading;

namespace Reminder

public class Reminder

public Timer stateTimer;
public void Check()

AutoResetEvent autoEvent = new AutoResetEvent(false);
StatusChecker statusChecher = new StatusChecker();
TimerCallback tcb = statusChecher.CheckInventory;
stateTimer = new Timer(tcb, autoEvent, 1000, 5000);
//autoEvent.WaitOne(1, false);
stateTimer.Change(5000, 1000);
stateTimer.Dispose();



class StatusChecker

public void CheckInventory(object stateInfo)

AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
int inventoryShortageCount = 5;
if (inventoryShortageCount > 0)

System.Windows.Forms.MessageBox.Show("");





在Form里面调用
private void Form1_Load(object sender, EventArgs e)

Reminder r = new Reminder();
r.Check();
//r.stateTimer.Dispose();
//如果这样,Timer就直接被Dispose掉了,如何才能在Form里面随意停止Timer

autoEvent.WaitOne(1, false);
stateTimer.Change(5000, 1000);
stateTimer.Dispose();
这三条后来测试用的,不是原来代码

Threading.Timer 属于100% 多线程
Timers.Timer 默认多线程,可设置为单线程
既然是多线程,不管通过回调 还是事件 执行任务,都是开启的另一个线程;
你可以暂停或销毁计时器(Timer)本身,但是不能操作里面新开线程的任务,这也是多线程设计的期望方式,因为你不知道 超线程里面到底执行到哪儿了。
但是,像我这种(刁民)有时候就喜欢那么横,所以就把 新开的任务装在一个 new Thread()里面,这样就可以操作这个线程了,(到时只需要暴力abort() 终止这个线程就行)。

Threading.Timer 暂停: Change(-1,任意值); 启动: Change(大于等于0,时间间隔);
Timers.Timer 暂停: Stop(); 启动:Start();
再次提醒,这里暂停的意思是 计时器不在重新启动,不是终止计时器的里面任务。
参考技术A stateTimer.Change(-1, 任意值);就可以停止。
Threading.Timer 没有Enabled属性。
参考技术B timer.stop()调用停止的方法呀,timer.start()开始 开始和停止是对应的呀 参考技术C timer enabled属性改为false试试。 参考技术D stateTimer.Enable=false;
stateTimer.Dispose();

以上是关于c# timer停止不了,请问如何解决的主要内容,如果未能解决你的问题,请参考以下文章

C# winform中timer函数如何停止,点运行后可再次启动周期事件

C# winform中timer函数如何停止,点运行后可再次启动周期事件

线程运行时,Timer计时不准,如何解决?

c# - 如何立即停止计时器

如何停止移动硬盘?

C# winform程序,UI界面锁死。如何处理?