PDA

View Full Version : سوال: تایمر دار کردن حلقه



fortex
جمعه 30 فروردین 1392, 12:41 عصر
سلام و خسته نیاشید دوستان .
من دوتا حلقه تو در تو دارم که صفحه نمایش رو پیمایش میکنه
اینم کدش :

int y;
int x;
for (x=0;x<=550;x++)
for (y = 0; y <= 500; y++)
{
this.Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = new Point(x, y);
Cursor.Clip = new Rectangle(this.Location, this.Size);
}
حالا مشکلی که دارم اینه که خیلی سریع و در یک چشم بهم زدن اینکارو میکنه . و من میخام مثلا هر تیم ثانیه یک بار یک خونه پیمایش بشه . باید چیکار کنم؟

kebriya
جمعه 30 فروردین 1392, 13:07 عصر
با تایمر بنویس. دیگه حلقه نذار

kebriya
جمعه 30 فروردین 1392, 13:30 عصر
یه چیزی مثل این:


int y;
int x;
private void button1_Click(object sender, EventArgs e)
{

x = 60;
y = 80;
timer1.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
if (x < 550)
{
label3.Text = x.ToString();
label4.Text = y.ToString();
this.Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = new Point(x, y);
Cursor.Clip = new Rectangle(this.Location, this.Size);
y+=20;
if (y >= 500)
{
x+=20;
y = 80;
}
}
else
{
timer1.Enabled = false;

}

sohil_ww
جمعه 30 فروردین 1392, 17:43 عصر
یا می تونی از sleep استفاده کنی

phpeproject.ir
جمعه 30 فروردین 1392, 17:45 عصر
یا می تونی از sleep استفاده کنی
با step باز هم سرعت بالاست تایمر بهترین رهه همینجور که دوستمون گفتن

sohil_ww
جمعه 30 فروردین 1392, 18:03 عصر
با step باز هم سرعت بالاست تایمر بهترین رهه همینجور که دوستمون گفتن

مدت زمان دسته خودمونه هر مقداری بخوایم قرار می دیم !

fortex
شنبه 31 فروردین 1392, 14:18 عصر
آقا سهیل میشه یکم توضیح بدبد چجوری؟

amirzandi
شنبه 31 فروردین 1392, 16:23 عصر
متاسفانه این مبحث با رها تکرار شده و همیشه دوستان اشتباه می کنند. اگر شما از Sleep استفاده کنی کل فرمت هنگ می کنه. شما باید از System.Threading.Timer استفاده کنید. یک نمونه اینجا گذاشتم:
http://amirzandi.blog.com/?p=195

sohil_ww
شنبه 31 فروردین 1392, 16:26 عصر
متاسفانه این مبحث با رها تکرار شده و همیشه دوستان اشتباه می کنند. اگر شما از Sleep استفاده کنی کل فرمت هنگ می کنه. شما باید از System.Threading.Timer استفاده کنید. یک نمونه اینجا گذاشتم:
http://amirzandi.blog.com/?p=195

میشه توضیح بدی چرا هنگ می کنه ؟!

mousa1992
شنبه 31 فروردین 1392, 16:52 عصر
سلام

میشه توضیح بدی چرا هنگ می کنه ؟!

تمام پردازش های برنامه با استفاده از یک thread انجام میشه شما وقتی main thread رو sleep میکنید پردازش کل برنامه متوقف میشه به همون اندازه ای که sleep میکنید ینی تا زمانی که نشانگر موستون به اخرین نقطه نرسه ( در واقع حلقه به پایان نرسیده باشه ) شما هیچ کار دیگه ای نمیتونید انجام بدید
ی راه اینه که از ی thread دیگه برای انجام این کار استفاده کنید و یا اینکه از تایمر _ که با تایمر کارتون خیلی راحت تره

موفق باشید

amirzandi
شنبه 31 فروردین 1392, 17:26 عصر
دقیقا همینطور که موسی گفتن. او نمونه که گذاشتم رو چک کنید. بدون اینکه فرم هنگ کنه هر 10 ثانیه یکبار انجام می ده.