Постійний збір на дрони FPV для ЗСУ
Закидуй дві гривні!
FPV-дрони змінюють хід війни
Змінюй хід війни!

Задержка в C#

🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
Статус: Offline
Реєстрація: 07.02.2010
Повідом.: 316
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #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;

}

Преобразуйте код или под скажите как такое сделать....
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #2
using System.Threading;

Thread.Sleep(int) добавь в свой цикл. В качестве аргумента задержка в миллисекундах, если мне не изменяет память
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3
for (int i = 0; i < buffer.Length; i++)
{
Thread.Sleep(100);
textBox2.Text += buffer.ToString();

}

Вот так вы имеете в виду???
Так не работает просто через некоторое время выводит весь массив
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
в c# нет чегото типа

sleep 5000 ?
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #5
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #6
Мну мне нужно что бы оно віводило каждый элемент массива с задержкой, а так тупо через Sleep оно ждет маленько, а потом тупо сразу выводит весь массив

Что бы выводилось в textBox
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #7
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #8
WindowsForms
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #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);
}

Код не компилировался ни разу, т.е. ошибок может быть выше крыши, но, думаю, идея должна быть ясна.
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #10
Код не компилировался ни разу, т.е. ошибок может быть выше крыши, но, думаю, идея должна быть ясна.

Все правильно сказал, но боюсь у него щас точно крышу снесет. Плохо когда люди не знают что такое Win32 API, message loop и все что с ним связано :)
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #11
и одной ошибки))) и все заработало))) спасибо))
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #12
А идею-то понял? :D
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #13
странное решение выводить массив в текстбокс :)
Для простоты понимания можно было воспользоваться таймером, интервалом которого была бы желаемая задержка, а в обработчике тика делать вывод.

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

Конечно вносить задержку в основной поток программы ради такой фигни это не рационально и не правильно, и все таки мне непонятно почему весь поток висит до конца сортировки, если ТС вставляет задержку внутри цикла :confused:
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #14
Потому что он потом выводит элементы массива, он Thread.Sleep пихал перед буфером,
а потом выводил весь буфер одним Console.Write.

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

З.Ы. Не увидел, что Forms. Там все окно лочится до конца выполнения кода.
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #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 (т.е. отправить сообщение окну, при обработке которого будет произведен вызов) операция довольно опасная, т.к. без понимания как это все работает может запросто привести к дедлоку
 
Останнє редагування:
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #16
всем спасибо за ответы и советы)))
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #17
имхо - таймер и по каждому тику выводить элемент
 
  • 🟡 05:31 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #18
Чисто на правах флуда: Как говорил мой трудовик - "Задержка не у нас и не в том месте" (с)
 
Назад
Зверху Знизу