Перейти к содержимому

Фото
- - - - -

движенsые и задержка в Visual C#


  • Вы не можете создать новую тему
  • Please log in to reply
5 ответов в этой теме

#1 Arto

Arto
  • Новобранец
  • 4 сообщений

Отправлено 16 Август 2008 - 18:51

такой код, в принципи должно дать поузу на 3 секунд и потом нанести линиу, и так 4 раза, но почему то ждет около 12 секунд (3x4), и потом 4 линии вставльяет с разу, в чем проблема??
//////////////////////////////////////////////////////////////////////////////////
Pen myPen = new Pen(System.Drawing.Color.Red, 1);
for (int ii = 0; ii <= 3; ii++)
{
Thread.Sleep(3000); //поуза на 3 секунду
graphDrawingAxis.DrawLine(myPen, ii*200, 350, 200, 120);
}
/////////////////////////////////////////////////////////////////////////////
  • 0

#2 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 16 Август 2008 - 19:56

Вообще советую Thread.Sleep не пользовать ... а применять Timer. Ну или использовать перерисовку this.Refresh() после DrawLine чтобы своевремено отображались изменения.
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#3 Arto

Arto
  • Новобранец
  • 4 сообщений

Отправлено 19 Август 2008 - 20:56

Вообще советую Thread.Sleep не пользовать ... а применять Timer. Ну или использовать перерисовку this.Refresh() после DrawLine чтобы своевремено отображались изменения.

Вообше то this.Refresh() даль резултат, но облость отображении силно моргаеть,
  • 0

#4 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 20 Август 2008 - 14:38

Arto, я и говорю что это не хороший вариант ... используй Timer .... всё будет работать на ура!
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#5 SmokEr

SmokEr
  • Пользователь
  • 119 сообщений

Отправлено 26 Август 2008 - 09:03

На работе скушно, решил набросать вариант реализации таймера, вдруг пригодицца.

using System;
using System.Drawing;
using System.Windows.Forms;

class TimerDemo : Form
{
	Timer t;
	int i;
	static void Main()
	{
		Application.Run(new TimerDemo());
	}
	public TimerDemo()
	{
		this.Size = new Size(800, 600);
		t = new Timer();
		t.Interval = 1000;
		t.Tick +=new EventHandler(t_Tick);
		//t.Start();
	}

	void  t_Tick(object sender, EventArgs e)
	{
		Pen myPen = new Pen(System.Drawing.Color.Red, 1);
		Graphics g = CreateGraphics();
		g.DrawLine(myPen, i*200, 350, 200, 120);
		i++;
		if (i > 3) t.Stop(); 
	}
	protected override void OnPaint(PaintEventArgs e)
	{
		i = 0;
		t.Start();
	}
}

  • 0

#6 SmokEr

SmokEr
  • Пользователь
  • 119 сообщений

Отправлено 26 Август 2008 - 09:42

..и решение для тех кто не может без ThreadSleep.
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;

class ThreadDemo : Form
{

	Thread t;
	static void Main()
	{
		Application.Run(new ThreadDemo());
	}
	public ThreadDemo()
	{
		this.Size = new Size(800, 600);  
	}
	void draw()
	{
		Pen myPen = new Pen(System.Drawing.Color.Red, 1);
		Graphics g = CreateGraphics();
		for (int i = 0; i <= 3; i++)
		{
			Thread.Sleep(300); //поуза на 3 секунду 
			g.DrawLine(myPen, i * 200, 350, 200, 120);
		}
	}
	protected override void OnPaint(PaintEventArgs e)
	{
		t = new Thread(new ThreadStart(draw));
		t.Start();
	}
}


  • 0