none
TextBox Последовательный вывод RRS feed

  • Вопрос

  •  Здравствуйте.

    Простой вопос

    privatevoidbutton1_Click(objectsender, EventArgse)

            {

                System.Threading.Thread.Sleep(1000);

                textBox1.Text = "stek";

                System.Threading.Thread.Sleep(1000);

                textBox1.Text = "asd";

                  }

    При нажатии на кнопку в текстбоксе появляется asd и только. Можно как-нибудь сделать чтоб сначала  stek а потом asd появлялось?

    2 июля 2015 г. 23:41

Ответы

  • Блокирование основного потока таким образом недопустимо и приведет к тому что во первых ничего не будет происходить, а во вторых к тому что приложение престанет отвечать и может быть закрыто.

    Если вам переодически что то делать то используйте для этого таймер (System.Windows.Forms.Timer).

    В днном случае при нажатии кнопки запустите таймер и когда он сработает выведите первую строку. Потом запустите таймер еще раз и по срабатыванию напечатайте вторую строку.

    Пример использования System.Windows.Forms.Timer есть в MSDN.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа kot17 3 июля 2015 г. 20:55
    Модератор
  • Для этого нужно, чтобы обработчик нажатия кнопки вернул управление после строки

    textBox1.Text = "stek";

    т.к. оконные сообщения обрабатываются последовательно (текст не будет обновлен до окончания обработки нажатия кнопки).

    Решение может быть следующим: нажатие на кнопку инициирует запуск асинхронной операции (потока), который меняет текст в TextBox-е с помощью Form.Invoke.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа kot17 3 июля 2015 г. 20:54

Все ответы

  • Блокирование основного потока таким образом недопустимо и приведет к тому что во первых ничего не будет происходить, а во вторых к тому что приложение престанет отвечать и может быть закрыто.

    Если вам переодически что то делать то используйте для этого таймер (System.Windows.Forms.Timer).

    В днном случае при нажатии кнопки запустите таймер и когда он сработает выведите первую строку. Потом запустите таймер еще раз и по срабатыванию напечатайте вторую строку.

    Пример использования System.Windows.Forms.Timer есть в MSDN.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа kot17 3 июля 2015 г. 20:55
    Модератор
  • Для этого нужно, чтобы обработчик нажатия кнопки вернул управление после строки

    textBox1.Text = "stek";

    т.к. оконные сообщения обрабатываются последовательно (текст не будет обновлен до окончания обработки нажатия кнопки).

    Решение может быть следующим: нажатие на кнопку инициирует запуск асинхронной операции (потока), который меняет текст в TextBox-е с помощью Form.Invoke.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа kot17 3 июля 2015 г. 20:54