Windows Forms - отображать изменяющиеся значения - PullRequest
0 голосов
/ 05 февраля 2019

В Form Я пытаюсь отобразить изменяющееся значение в TextBox:

private void MyButton_Click(object sender, EventArgs e)
{
    for (int i = 0; i < 10; i++)
    {
        Start(i);
    } 
}
public void Start(int i)
{
    textBox1.Text = i.ToString();
    Thread.Sleep(200);
}

Отображается только последнее значение цикла.Почему?

1 Ответ

0 голосов
/ 05 февраля 2019

Существует поток, называемый потоком пользовательского интерфейса, который отвечает за обновление графического интерфейса.При нажатии кнопки это событие запускается в потоке пользовательского интерфейса.Таким образом, ваша Start функция также работает в потоке пользовательского интерфейса.Поток пользовательского интерфейса занят выполнением функции Start, поэтому у него нет возможности обновить текстовое поле до завершения функции Start.После завершения функции Start поток пользовательского интерфейса обновляет текстовое поле до последнего значения.

Вам нужно запустить функцию Start в другом потоке, поэтому поток пользовательского интерфейса может свободно обновлять текстовое поле.,Есть несколько способов сделать это.Вот один пример:

private System.Windows.Forms.Timer _timer;
private int _timer_i;

public Form1()
{
  InitializeComponent();

  _timer = new System.Windows.Forms.Timer()
  {
    Enabled = false,
    Interval = 200
  };
  _timer.Tick += _timer_Tick;
}

private void _timer_Tick(object sender, EventArgs e)
{
  textBox1.Text = _timer_i.ToString();
  _timer_i++;
  if (_timer_i >= 10)
  {
    _timer.Stop();
  }
}

private void button1_Click(object sender, EventArgs e)
{
  _timer.Stop();
  _timer_i = 0;
  _timer.Start();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...