C# timer定时器只执行一次

时间:2021-01-16 23:23:09
代码如下: 定时器设置的enabled=true,interval=1000,运行程序时,代码只执行成功了一次,并且会导致主界面卡。该如何修改
       //定时器每秒执行一次
        private void timer1_Tick(object sender, EventArgs e)
        {
            thread1= new Thread(new ThreadStart(zairuthread));
            thread1.IsBackground = true;
            thread1.Start();
        }
        private void zairuthread()
        {
            if (this.InvokeRequired)
            {
               this.BeginInvoke(new EventHandler(zairu), null);
            }
            else
            {
                zairu(this, null);
            }

        }
        private void zairu(object sender, EventArgs e)
        {
            mvideo.GrabImage("D:\\1.jpg");//截图
            List<Image> list = new List<Image>();
            list = FaceFind.FaceShowzhuye(pictureBox_get.Width, pictureBox_get.Height, "D:\\1.jpg");
            int i = list.Count;
            switch (i)
            {
                case 1:
                    pictureBox_get.Image = list[0];
            }
            thread1.Abort();
            thread1.Join();
        }

4 个解决方案

#1


将zairu中不涉及操作界面的代码放在zairuthread里面,invoke中的代码相当于单线程,当然会挂起UI。

#2


开那个线程不是画蛇添足么,最后还是绕到主线程去运行。

#3


在timer的Tick中加入断点,调试下,虽然界面卡, 但是timer也不应该只执行一次,没看到你timer相关的代码,不知道你timer是否是做了其他的一些处理导致了。

#4


应该是 zairu 中的代码耗时,invoke是已经不在线程中执行了,是主进程的

#1


将zairu中不涉及操作界面的代码放在zairuthread里面,invoke中的代码相当于单线程,当然会挂起UI。

#2


开那个线程不是画蛇添足么,最后还是绕到主线程去运行。

#3


在timer的Tick中加入断点,调试下,虽然界面卡, 但是timer也不应该只执行一次,没看到你timer相关的代码,不知道你timer是否是做了其他的一些处理导致了。

#4


应该是 zairu 中的代码耗时,invoke是已经不在线程中执行了,是主进程的