В момент Thread.Sleep приложение не отвечает - C#
Формулировка задачи:
На форме два текстовых поля, из одного из них при нажатии на кнопку получаем значение. Затем нужно чтоб, через каждую секунду выводить (ето значение - 1) в текстовое поле, короче счет секунд. Вот написал, но при запуске и нажатии на кнопку окно виснет, до тех пор пока переменная не будет равна 0, и потом только её выводит. В чем загвоздка?
Листинг программы
- private void button1_Click(object sender, EventArgs e)
- {
- int sec;
- sec = Convert.ToInt32(textBox3.Text);
- while (sec != 0)
- {
- if (sec == 0)
- {
- textBox1.Text = "lol";
- }
- else
- {
- sec--;
- Thread.Sleep(1000);
- textBox3.Text = Convert.ToString(sec);
- }
- }
- }
Решение задачи: «В момент Thread.Sleep приложение не отвечает»
textual
Листинг программы
- namespace WindowsFormsApplication1
- {
- partial class Form1
- {
- /// <summary>
- /// Требуется переменная конструктора.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
- /// <summary>
- /// Освободить все используемые ресурсы.
- /// </summary>
- /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
- #region Код, автоматически созданный конструктором форм Windows
- /// <summary>
- /// Обязательный метод для поддержки конструктора - не изменяйте
- /// содержимое данного метода при помощи редактора кода.
- /// </summary>
- private void InitializeComponent()
- {
- this.startButton = new System.Windows.Forms.Button();
- this.startValueTextBox = new System.Windows.Forms.TextBox();
- this.infoLabel = new System.Windows.Forms.Label();
- this.SuspendLayout();
- //
- // startButton
- //
- this.startButton.Location = new System.Drawing.Point(48, 123);
- this.startButton.Name = "startButton";
- this.startButton.Size = new System.Drawing.Size(75, 23);
- this.startButton.TabIndex = 0;
- this.startButton.Text = "button1";
- this.startButton.UseVisualStyleBackColor = true;
- this.startButton.Click += new System.EventHandler(this.StartButton_Click);
- //
- // startValueTextBox
- //
- this.startValueTextBox.Location = new System.Drawing.Point(12, 12);
- this.startValueTextBox.Name = "startValueTextBox";
- this.startValueTextBox.Size = new System.Drawing.Size(260, 20);
- this.startValueTextBox.TabIndex = 1;
- //
- // infoLabel
- //
- this.infoLabel.AutoSize = true;
- this.infoLabel.Location = new System.Drawing.Point(13, 39);
- this.infoLabel.Name = "infoLabel";
- this.infoLabel.Size = new System.Drawing.Size(35, 13);
- this.infoLabel.TabIndex = 2;
- this.infoLabel.Text = "label1";
- //
- // Form1
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(284, 262);
- this.Controls.Add(this.infoLabel);
- this.Controls.Add(this.startValueTextBox);
- this.Controls.Add(this.startButton);
- this.Name = "Form1";
- this.Text = "Form1";
- this.ResumeLayout(false);
- this.PerformLayout();
- }
- #endregion
- private System.Windows.Forms.Button startButton;
- private System.Windows.Forms.TextBox startValueTextBox;
- private System.Windows.Forms.Label infoLabel;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д