Задать вопрос
littleguga
@littleguga
Не стыдно не знать, а стыдно не интересоваться.

Как реализовать «бегающие» точки?

Хочется сделать свое отображение ожидания процесса.
Должно выглядеть так: 1) .
2) ..
3) ...
4) .
И так в цикле.
Вопрос, как реализовать это на c#?
В голову пришло такое, но при запуске форма зависает и не реагирует:
int i = 0;
int k = 0;
while (i < 1000)
{
	if (k == 0)
	{
		label1.Text = ".";
		k = 1;
	}
	else if (k == 1)
	{
		label1.Text = "..";
		k = 2;
	}
	else
	{
		label1.Text = "..";
		k = 0;
	}
		Thread.Sleep(100);
		i++;
}


ps.
В самой задаче уже отказался от этой затеи в пользу ProgressBar'a с Style=Marquee. Но вопрос теперь носит чисто академический интерес.

pps.
Уверен, что где-то в мире это уже реализовано. Но честно говоря я даже не знаю, как сформулировать вопрос "по-человечески", поэтому и погуглить не смог.
  • Вопрос задан
  • 2634 просмотра
Подписаться Оценить Комментировать
Решение пользователя Роман Павлов К ответам на вопрос (3)
Вызов Thread.Sleep(100) "вешает" ваш UI поток.

Вам нужно обновлять Label.Text асинхронно. В WinForms это можно сделать с помощью BackgroundWorker. Например:
  1. добавить на форму BackgroundWorker (допустим это будет дефолтовый backgroundWorker1)
  2. добавить необходимый код в его backgroundWorker1_DoWork()
  3. сделать вызов backgroundWorker1.RunWorkerAsync() из UI треда

Более подробно смотрите на MSDN.
Ответ написан