Змінюй хід війни! Допомагай ЗСУ!

Задержка в C#

🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
Статус: Offline
Реєстрація: 07.02.2010
Повідом.: 316
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #1
Задержка в C#

Короче говоря нужно сделать что бы элементы массива выводились после сортировки не сразу, а например через каждую секунду...

private void SortingByBubble(object sender, EventArgs e)
{

string buffer = textBox1.Text;
string[] StringArray = buffer.Split(' ');
int[] MembersOfArray = new int[StringArray.Length];
for (int i = 0; i < MembersOfArray.Length; i++)
MembersOfArray = Convert.ToInt32(StringArray);
MembersOfArray = Bubble.bubble(MembersOfArray, 4);

buffer = null;
for (int i = 0; i < MembersOfArray.Length; i++)
{
buffer += Convert.ToString(MembersOfArray);

buffer += " ";

}

textBox2.Text = buffer;

}

Преобразуйте код или под скажите как такое сделать....
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #2
using System.Threading;

Thread.Sleep(int) добавь в свой цикл. В качестве аргумента задержка в миллисекундах, если мне не изменяет память
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #3
for (int i = 0; i < buffer.Length; i++)
{
Thread.Sleep(100);
textBox2.Text += buffer.ToString();

}

Вот так вы имеете в виду???
Так не работает просто через некоторое время выводит весь массив
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #4
в c# нет чегото типа

sleep 5000 ?
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #6
Мну мне нужно что бы оно віводило каждый элемент массива с задержкой, а так тупо через Sleep оно ждет маленько, а потом тупо сразу выводит весь массив

Что бы выводилось в textBox
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #7
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #8
WindowsForms
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #9
Беда в том, что обработчик события исполняется в главном UI потоке и, соответственно, весь UI висит до конца сортировки. Чтобы всё было хорошо, нужен второй поток. Можно попробовать примерно следующим образом:

Код:
delegate void SetTextBoxTextDelegate(string text);

private void SetTextBox2Text(string text)
{
	if (InvokeRequired)
	{
		Invoke((SetTextBoxTextDelegate)SetTextBox2Text, text);
		return;
	}
	textBox2.Text = text;
}

private void BackgroundSortingByBubble(object initialTextObj)
{
	string initialText = (string)initialTextObj;
	string[] StringArray = initialText.Split(' ');
	int[] MembersOfArray = new int[StringArray.Length];
	for (int i = 0; i < MembersOfArray.Length; i++)
		MembersOfArray[i] = Convert.ToInt32(StringArray[i]);
	MembersOfArray = Bubble.bubble(MembersOfArray, 4);

	StringBuilder buffer = new StringBuilder(initialText.Length+1);
	for (int i = 0; i < MembersOfArray.Length; i++)
	{
		buffer.AppendFormat("{0} ", MembersOfArray[i]);
		SetTextBox2Text(buffer.ToString());
		Thread.Sleep(1000);
	}
}

private void SortingByBubble(object sender, EventArgs e)
{
	ThreadPool.QueueUserWorkItem(BackgroundSortingByBubble, textBox1.Text);
}

Код не компилировался ни разу, т.е. ошибок может быть выше крыши, но, думаю, идея должна быть ясна.
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #10
Код не компилировался ни разу, т.е. ошибок может быть выше крыши, но, думаю, идея должна быть ясна.

Все правильно сказал, но боюсь у него щас точно крышу снесет. Плохо когда люди не знают что такое Win32 API, message loop и все что с ним связано :)
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #11
и одной ошибки))) и все заработало))) спасибо))
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #12
А идею-то понял? :D
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #13
странное решение выводить массив в текстбокс :)
Для простоты понимания можно было воспользоваться таймером, интервалом которого была бы желаемая задержка, а в обработчике тика делать вывод.

Беда в том, что обработчик события исполняется в главном UI потоке и, соответственно, весь UI висит до конца сортировки. Чтобы всё было хорошо, нужен второй поток.

Конечно вносить задержку в основной поток программы ради такой фигни это не рационально и не правильно, и все таки мне непонятно почему весь поток висит до конца сортировки, если ТС вставляет задержку внутри цикла :confused:
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #14
Потому что он потом выводит элементы массива, он Thread.Sleep пихал перед буфером,
а потом выводил весь буфер одним Console.Write.

Где-то так...

З.Ы. Не увидел, что Forms. Там все окно лочится до конца выполнения кода.
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #15
Можно так:
Код:
private void SortingByBubble(object sender, EventArgs e)
{
   string buffer = textBox1.Text;
   string[] StringArray = buffer.Split(' ');
   int[] MembersOfArray = new int[StringArray.Length];
   for (int i = 0; i < MembersOfArray.Length; i++)
      MembersOfArray[i] = Convert.ToInt32(StringArray[i]);
   MembersOfArray = Bubble.bubble(MembersOfArray, 4);

   buffer = null;
   for (int i = 0; i < MembersOfArray.Length; i++)
   {
      buffer += Convert.ToString(MembersOfArray[i]);

      buffer += " ";
      [b]textBox2.Text = buffer;
      textBox2.Refresh();
      Thread.Sleep(1000);[/b]
   }
}

внесенные измененения выделил жирным

но лочить гуёвый поток очень нехорошо, поэтому практичней использовать таймер. Можно конечно и поток из пула заюзать, но имхо это хуже чем таймер, кстати делать вызов через Invoke (т.е. отправить сообщение окну, при обработке которого будет произведен вызов) операция довольно опасная, т.к. без понимания как это все работает может запросто привести к дедлоку
 
Останнє редагування:
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #16
всем спасибо за ответы и советы)))
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #17
имхо - таймер и по каждому тику выводить элемент
 
  • 🔴 22:25 Повітряна тривога в Харківський районСлідкуйте за подальшими повідомленнями.#Харківський_район
  • #18
Чисто на правах флуда: Как говорил мой трудовик - "Задержка не у нас и не в том месте" (с)
 
Назад
Зверху Знизу