В момент Thread.Sleep приложение не отвечает - C#

Узнай цену своей работы

Формулировка задачи:

На форме два текстовых поля, из одного из них при нажатии на кнопку получаем значение. Затем нужно чтоб, через каждую секунду выводить (ето значение - 1) в текстовое поле, короче счет секунд. Вот написал, но при запуске и нажатии на кнопку окно виснет, до тех пор пока переменная не будет равна 0, и потом только её выводит. В чем загвоздка?
Листинг программы
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. int sec;
  4. sec = Convert.ToInt32(textBox3.Text);
  5. while (sec != 0)
  6. {
  7. if (sec == 0)
  8. {
  9. textBox1.Text = "lol";
  10. }
  11. else
  12. {
  13. sec--;
  14. Thread.Sleep(1000);
  15. textBox3.Text = Convert.ToString(sec);
  16. }
  17. }
  18. }

Решение задачи: «В момент Thread.Sleep приложение не отвечает»

textual
Листинг программы
  1. namespace WindowsFormsApplication1
  2. {
  3.     partial class Form1
  4.     {
  5.         /// <summary>
  6.         /// Требуется переменная конструктора.
  7.         /// </summary>
  8.         private System.ComponentModel.IContainer components = null;
  9.  
  10.         /// <summary>
  11.         /// Освободить все используемые ресурсы.
  12.         /// </summary>
  13.         /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
  14.         protected override void Dispose(bool disposing)
  15.         {
  16.             if (disposing && (components != null))
  17.             {
  18.                 components.Dispose();
  19.             }
  20.             base.Dispose(disposing);
  21.         }
  22.  
  23.         #region Код, автоматически созданный конструктором форм Windows
  24.  
  25.         /// <summary>
  26.         /// Обязательный метод для поддержки конструктора - не изменяйте
  27.         /// содержимое данного метода при помощи редактора кода.
  28.         /// </summary>
  29.         private void InitializeComponent()
  30.         {
  31.             this.startButton = new System.Windows.Forms.Button();
  32.             this.startValueTextBox = new System.Windows.Forms.TextBox();
  33.             this.infoLabel = new System.Windows.Forms.Label();
  34.             this.SuspendLayout();
  35.             //
  36.             // startButton
  37.             //
  38.             this.startButton.Location = new System.Drawing.Point(48, 123);
  39.             this.startButton.Name = "startButton";
  40.             this.startButton.Size = new System.Drawing.Size(75, 23);
  41.             this.startButton.TabIndex = 0;
  42.             this.startButton.Text = "button1";
  43.             this.startButton.UseVisualStyleBackColor = true;
  44.             this.startButton.Click += new System.EventHandler(this.StartButton_Click);
  45.             //
  46.             // startValueTextBox
  47.             //
  48.             this.startValueTextBox.Location = new System.Drawing.Point(12, 12);
  49.             this.startValueTextBox.Name = "startValueTextBox";
  50.             this.startValueTextBox.Size = new System.Drawing.Size(260, 20);
  51.             this.startValueTextBox.TabIndex = 1;
  52.             //
  53.             // infoLabel
  54.             //
  55.             this.infoLabel.AutoSize = true;
  56.             this.infoLabel.Location = new System.Drawing.Point(13, 39);
  57.             this.infoLabel.Name = "infoLabel";
  58.             this.infoLabel.Size = new System.Drawing.Size(35, 13);
  59.             this.infoLabel.TabIndex = 2;
  60.             this.infoLabel.Text = "label1";
  61.             //
  62.             // Form1
  63.             //
  64.             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
  65.             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  66.             this.ClientSize = new System.Drawing.Size(284, 262);
  67.             this.Controls.Add(this.infoLabel);
  68.             this.Controls.Add(this.startValueTextBox);
  69.             this.Controls.Add(this.startButton);
  70.             this.Name = "Form1";
  71.             this.Text = "Form1";
  72.             this.ResumeLayout(false);
  73.             this.PerformLayout();
  74.  
  75.         }
  76.  
  77.         #endregion
  78.  
  79.         private System.Windows.Forms.Button startButton;
  80.         private System.Windows.Forms.TextBox startValueTextBox;
  81.         private System.Windows.Forms.Label infoLabel;
  82.     }
  83. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут