Я пытаюсь обновить ярлык каждую секунду, чтобы обновления обратного отсчета имели некоторые проблемы. Я чрезвычайно новичок в С# извинения за вопросы noob.
private void Form1_Load(object sender, EventArgs e)
{
bool ephCD = true;
int ephHours = (DateTime.Today.AddDays(1) - DateTime.Now).Hours;
int ephMinu = (DateTime.Today.AddDays(1) - DateTime.Now).Minutes;
int ephSecs = (DateTime.Today.AddDays(1) - DateTime.Now).Seconds;
label1.Text = ephHours.ToString() + ":" + ephMinu.ToString() + ":" + ephSecs.ToString();
while (ephCD == true)
{
label1.Refresh();
}
}
При запуске программа даже не появляется.
Почему программа не появляется?
Вы выполняете бесконечный цикл в Form_Load
. Это означает, что форма никогда не закончит загрузку, и ваша программа застрянет.
Ваш цикл обновления должен находиться в отдельном потоке или идеально подбрасывать цикл и использовать Timer
вместо того, чтобы запирать ЦП на бесконечном цикле.
Timer myTimer = new Timer(1000);
void Form1_Load()
{
myTimer.Elapsed += UpdateLabel;
myTimer.Start();
}
private void UpdateLabel(object sender, ElapsedEventArgs e)
{
//Update label here
}
Это будет сделано, просто скопируйте и вставьте:
private void Form1_Load(object sender, EventArgs e)
{
// To update the first time.
label1.Text = (DateTime.Today.AddDays(1)- DateTime.Now).ToString(@"hh\:mm\:ss");
var timer = new Timer {Interval = 1000};
timer.Tick += (o, args) =>
{
label1.Text = (DateTime.Today.AddDays(1)- DateTime.Now).ToString(@"hh\:mm\:ss");
};
timer.Start();
}
Обновление ярлыка в инструкции while
не является хорошим вариантом, лучшим подходом будет использование класса Timer
var aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += OnTimedEvent;
aTimer.Enabled = true;
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
//update the label
}
Я закончил с этим более простым решением:
<script>
var myTimer = setInterval(Atualizar, 20000);
function Atualizar() {
__doPostBack('UpdatePanelNew', '');
}
</script>
Убедитесь, что вы завернули то, что хотите обновить, в UpdatePanel.
Этот код будет запрашивать обратную передачу каждые 20 секунд. Так что в коде, который я могу сделать:
protected void Page_Load(object sender, EventArgs e)
{
myLabel.InnerText = GetInDatabaseTheValueIwant();
}