终止System.Timers.Timer线程

时间:2022-07-13 20:38:09
点击Button1运行后,点击Button2.但是计时器里面的While循环体还在执行,怎样结束此线程?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        System.Timers.Timer t = new System.Timers.Timer(1000);
        private void Form1_Load(object sender, EventArgs e)
        {
            t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
        }

        void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            t.Stop();
            int n = 0;
            while (true)
            {
                n++;
                System.Threading.Thread.Sleep(1000);
                this.label1.Text = n.ToString();
            }
        }
        private void bgwTest_DoWork(object sender, DoWorkEventArgs e)
        {

            if (bgwTest.CancellationPending)
            {
                e.Cancel = true;
            }

            t.Start();
        }

        private void bgwTest_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            //MessageBox.Show("OK");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (bgwTest.IsBusy)
            {
                bgwTest.CancelAsync();
            }

            t.Stop();
            bgwTest.RunWorkerAsync();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            t.Enabled = false;
            t.Stop();
        }
    }
}

5 个解决方案

#1


timer的代码在哪呢?
另外,timer本身就是定时执行的,怎么里面还有while?

#2


t.stop()或t.enable=false
仅仅是timer不会被时间触发,已经在执行的代码是不会停下来的
里面不要有死循环

#3


已经在执行的代码是不会停下来的
现在就是要解决这个问题的,已经执行的代码怎样终止?

#4


引用 3 楼 xiaozhunamen 的回复:
已经在执行的代码是不会停下来的
现在就是要解决这个问题的,已经执行的代码怎样终止?

while(timer1.enable)
这样timer1不可用的时候就退出循环了
不要用死循环

#5


另外,timer本身就是每间隔固定时间就执行一次的,你里面套while有什么必要么?

#1


timer的代码在哪呢?
另外,timer本身就是定时执行的,怎么里面还有while?

#2


t.stop()或t.enable=false
仅仅是timer不会被时间触发,已经在执行的代码是不会停下来的
里面不要有死循环

#3


已经在执行的代码是不会停下来的
现在就是要解决这个问题的,已经执行的代码怎样终止?

#4


引用 3 楼 xiaozhunamen 的回复:
已经在执行的代码是不会停下来的
现在就是要解决这个问题的,已经执行的代码怎样终止?

while(timer1.enable)
这样timer1不可用的时候就退出循环了
不要用死循环

#5


另外,timer本身就是每间隔固定时间就执行一次的,你里面套while有什么必要么?