C#

После запуска программа C# не отвечает

Form1.cs:
 using System;   

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using System.Windows.Forms;



namespace Timer_app

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}



private void start_Click(object sender, EventArgs e)

{

int hour = 00;

int minute = 00;

int second = 00;

int milisecond = 00;



while (true)

{

Thread.Sleep(10);

milisecond++;



if (milisecond == 100)

{

milisecond = 00;

second++;

}



if (second == 60)

{

second = 00;

minute++;

}



if (minute == 60)

{

minute = 00;

hour++;

}



timer.Text = $"{hour}:{minute}:{second}:{milisecond}";

}



} }

}

Как только я запускаю проект перестаёт отвечать программа. Есть ли возможность это исправить? Я только изучаю язык. Простите, если ошибка будет слишком глупой
Проблема заключается в бесконечном цикле while(true). Он не позволяет программе завершиться и продолжает бесконечно выполняться, что приводит к зависанию программы. Для решения этой проблемы можно использовать таймер, который будет обновлять текстовое поле с таймером каждые 10 миллисекунд.

Вот исправленный код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows .Forms;

namespace Timer_app
{
public partial class Form1 : Form
{
private int hour = 0;
private int minute = 0;
private int second = 0;
private int milisecond = 0;

public Form1()
{
InitializeComponent();
}

private void timer_Tick(object sender, EventArgs e)
{
milisecond++;
if (milisecond == 100)
{
milisecond = 0;
second++;
}
if (second == 60)
{
second = 0;
minute++;
}
if (minute == 60)
{
minute = 0;
hour++;
}
timerLabel.Text = $"{hour:00}:{minute:00}:{second:00}:{milisecond:00}";
}

private void startButton_Click(object sender, EventArgs e)
{
timer.Enabled = true;
}

private void stopButton_Click(object sender, EventArgs e)
{
timer.Enabled = false;
}

private void resetButton_Click(object sender, EventArgs e)
{
hour = 0;
minute = 0;
second = 0;
milisecond = 0;
timerLabel.Text = "00:00:00:00";
}
}
}

В этом коде мы использовали таймер (Timer), который обновляет текстовое поле с таймером каждые 10 миллисекунд. Таймер можно включить и выключить с помощью кнопок "Start" и "Stop". Кнопка "Reset" сбрасывает таймер в начальное состояние.
ЕШ
Евгений Шляхин
5 399
Лучший ответ
Анатолий Захарченко Странно, но теперь при нажатии теперь вообще ничего не работает. Не зависает, но и не работаетПрикрепил скрин, т.к. маил ру не даёт прикрепить код
Виктор Лукша Он спросил у людей, а не chatgpt если сам не шаришь не отвечай плиз на вопросы
просто сделай первоначальный код асинхронным.
 private async void start_Click(object sender, EventArgs e) 
{
await Task.Run(async () =>
{
int hour, minute, second, milisecond;
hour = minute = second = milisecond = 0;
while (true)
{
await Task.Delay(10);
++milisecond;
if (milisecond == 100)
{
milisecond = 0;
++second;
}
if (second == 60)
{
second = 0;
++minute;
}
if (minute == 60)
{
minute = 0;
++hour;
}
timer.Text = $"{hour:00}:{minute:00}:{second:00}:{milisecond:00}";
}
});
}
А если хочешь использовать таймер, то ему надо еще задать интервал и запустить, но ты этого не сделал. Читай справку у майкрософта.
VF
Vlad Fox
10 596