System.Windows.Forms.Timer Работает менее 30 минут, перестает работать через 30 минут - PullRequest
0 голосов
/ 26 февраля 2019

Этот таймер срабатывает, как и ожидалось, когда он установлен на 3 секунды, 10 секунд, 60 секунд, 10 минут, 20 минут, но перестает работать при установке на 30 минут.Это просто простое приложение, которое всплывает на моем экране, чтобы напомнить мне о выполнении различных задач.Вместо этого я видел сообщения об использовании системных таймеров, потокового таймера и форм-таймера.Но так как это конкретное приложение предназначено для взаимодействия с пользовательским интерфейсом, я подумал, что Forms Timer - это путь.Кроме того, код, кажется, прекрасно работает в течение менее 30 минут.

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        static int thirtyMins = 30 * 60 * 1000;
        static int runTime = thirtyMins;
        static int minTotal = 0;

        public Form1()
        {
            InitializeComponent();
        }

        public void updateLabels()
        {
            label1.Text = "shown  " + DateTime.Now.ToString("h:mm:ss tt");
            label2.Text = runTime / 1000 + " sec";
            label3.Text = "hidden " + minTotal;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Interval = thirtyMins * 1000;
            timer1.Enabled = true;
            updateLabels();
            Console.WriteLine(DateTime.Now.ToString("h:mm:ss tt") + " Loaded!!");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            updateLabels();
            this.WindowState = FormWindowState.Normal;
            this.Activate();
            this.Update();
            Console.WriteLine(DateTime.Now.ToString("h:mm:ss tt") + " Tick!!");
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (textBox1.Text.Contains("*"))
                {
                    int sec = 1;

                    String[] split = textBox1.Text.Split('*');
                    foreach (string s in split)
                    {
                        sec *= Int32.Parse(s.Trim());
                    }

                    runTime = sec * 1000;
                }
                else
                {
                    runTime = Int32.Parse(textBox1.Text.Trim()) * 1000;
                }

                timer1.Interval = runTime;
                updateLabels();
            }
            catch
            {
                timer1.Interval = thirtyMins;
            }
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            if (WindowState == FormWindowState.Minimized)
            {
                minTotal++;
                updateLabels();
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...