Текстовое поле не отображает текст, а экран интерфейса не перемещается - PullRequest
0 голосов
/ 06 мая 2019

Это мое требование, которое я должен использовать во время цикла внутри таймера, после запуска приложения после нажатия кнопки Пользовательский интерфейс заблокирован, не может двигаться, и текст также не отображается в текстовом поле

ниже код

using System;
using System.Windows.Forms;
namespace WinScreenLocked
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int Number = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            while (true)
            {
                textBox1.Text = Number.ToString();
                Number++;
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }
    }
}

Ответы [ 3 ]

1 голос
/ 06 мая 2019
// Create a 30 min timer 
timer = new System.Timers.Timer(1800000);

// Hook up the Elapsed event for the timer.
timer.Elapsed += OnTimedEvent;

timer.Enabled = true;


private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    // do stuff
}

с обычными предостережениями: таймер не будет очень точным и может потребоваться GC.KeepAlive (таймер)

См. Также: Почему выживает System.Timers.TimerGC, но не System.Threading.Timer?

1 голос
/ 06 мая 2019

Вы можете остановить поток, чтобы заблокировать пользовательский интерфейс, т. Е. С помощью

    System.Threading.Thread.Sleep(2000);

это займет миллисекунды в течение более 2000, миллисекунды равны 2 секундам.

0 голосов
/ 06 мая 2019

Поскольку это winforms, вы можете использовать Application.DoEvents () для обработки обновления пользовательского интерфейса.

См. https://social.msdn.microsoft.com/Forums/en-US/b1b1969d-8a51-496c-9274-a0ac1708a8b4/what-does-applicationdoevents-actually-do?forum=csharplanguage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...