PDA

View Full Version : توقف اجرای خطوط برنامه برای مدتی معین



Ghasem_M
سه شنبه 01 اسفند 1385, 01:51 صبح
با سلام خدمت دوستان عزیز برنامه نویس

من دنبال دستوری میگردم که با اون بشه کاری کرد که برنامه برای یک زمان معین هیچ کدی رو اجرا نکنه مثل دستور pause 1000 در c که وقتی برنامه به این خط می رسید برای یک ثانیه کد خط بعدی رو اجرا نمیکرد و یک ثانیه برنامه در همون خط pause متوقف بود خواهش میکنم از دوستان که اگر اطلاع دارند حتما به من کمک کنند چون خیلی فوری و ضروری :افسرده:

Ner'zhul Arthas
سه شنبه 01 اسفند 1385, 05:15 صبح
Threading.Thread.Sleep(1000)

Ghasem_M
سه شنبه 01 اسفند 1385, 13:52 عصر
Threading.Thread.Sleep(1000)


اول از شما متشکرم که این دستور رو مطرح کردید ولی من از اون استفاده کردم و جواب نگرفتم
چون این دستور کل فرم رو متوقف می کنه به دستورات زیر نگاه کنید


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
"label1.text="ghasem
(Threading.Thread.Sleep (2000
End Sub
اگر از این دستور استفاده کنیم ابتدا 2000 میلی ثانیه توقف انجام میشه بعد label1 تغیر میکنه ولی من می خواهم ابتدا label1 تغییر کنه یعنی تغیرش رو فرم دیده بشه بعد توقف انجام بشه

PC2st
سه شنبه 01 اسفند 1385, 16:12 عصر
فکر نمیکنم بشه همچنین کاری کرد. مگر اینکه خودت یک کلاس ایجاد کنی که از TextBox مشتق شده باشه و خاصیت Text اون رو Override کنی و کاری کنی که ذره ذره نمایش داده بشه... یا اینکه میتونی از Timer هم استفاده کنی، که مثلا یک رشته رو ذخیره کرده و به کمک Timer هر 2000 میلی ثانیه، فقط یک کاراکتر رو به label1.Text اضافه کنید.

Ghasem_M
سه شنبه 01 اسفند 1385, 17:16 عصر
فکر نمیکنم بشه همچنین کاری کرد. مگر اینکه خودت یک کلاس ایجاد کنی که از TextBox مشتق شده باشه و خاصیت Text اون رو Override کنی و کاری کنی که ذره ذره نمایش داده بشه... یا اینکه میتونی از Timer هم استفاده کنی، که مثلا یک رشته رو ذخیره کرده و به کمک Timer هر 2000 میلی ثانیه، فقط یک کاراکتر رو به label1.Text اضافه کنید.
مثل اینکه شما متوجه منظور من نشدید من فقط می خواهم برای یک زمان معین دستورات بعدی اجرا نشند کدی که گذاشته بودند این کار رو می کرد ولی خط های بالای این دستور هم اجرا نمی شد من می خوام که تمام تغیراتی که قبل از این دستور بر روی فرم اعمال می کنم دیده بشند بعد برنامه متوقف بشه که این کد این کار رو نمی کرد

مهدی نان شکری
سه شنبه 01 اسفند 1385, 19:38 عصر
با سلام برای این منظور می تونید از API Sleep استفاده کنید.

Ner'zhul Arthas
سه شنبه 01 اسفند 1385, 19:57 عصر
اول از شما متشکرم که این دستور رو مطرح کردید ولی من از اون استفاده کردم و جواب نگرفتم
چون این دستور کل فرم رو متوقف می کنه به دستورات زیر نگاه کنید


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
"label1.text="ghasem
(Threading.Thread.Sleep (2000
End Sub
اگر از این دستور استفاده کنیم ابتدا 2000 میلی ثانیه توقف انجام میشه بعد label1 تغیر میکنه ولی من می خواهم ابتدا label1 تغییر کنه یعنی تغیرش رو فرم دیده بشه بعد توقف انجام بشه



Me.Refresh()
Threading.Thread.Sleep(2000)

Behnama
چهارشنبه 27 تیر 1386, 22:53 عصر
سلام دوستان . من یک مشکل دیگه دارم . من یک دکمه دارم که Thread رو متوقف کنه . اما وقتی Thread داره کار می کنه ، امکان کلیک روی این دکمه نیست . یعنی مثل اینکه اصلا thread نساخته باشم ، کل صفحه تا اتمام کار اون ریسمان قفل می شه .

RezaKia
پنج شنبه 28 تیر 1386, 23:46 عصر
سلام،
وقتی داری CurrentThread رو قفل میکنی یغنی داری این دکمه رو هم قفل میکنی چون تو همین Thread قرار داره.

یک راه حل استفاده از حالت Apartment Thread یا همون Multiple Threading است.
با این کار Thread دکمه رو از اونی که داره قفل میشه میتونی جدا کنی.

توضیح بیشتر در این مورد رو از MSDN بگیر چون یکسری نکات خیلی حساس داره که اگر رعایت نکنی سیستم رو به وضع نامطمئن میبره. مثلا اگر Mutex ها رو درست بازوبسته نکنی سیستم Ram کم میاره حالا هرچی هم Swap File جا داشته باشه هیچی رو سیستم اجرا نمیشه یا کند اجرا میشه. فاجعه اونجاست که حتی تو بعضی شرایط ویندوز حتی Shutdown با Logoff هم نمیشه.

موفق باشی.

رضا عربلو
سه شنبه 02 مرداد 1386, 23:01 عصر
توی یک لوپ که خروج از آن با تایمر کنترل می شه application.ProccessMessage را بگذار.

bad_boy_2007
پنج شنبه 04 مرداد 1386, 09:33 صبح
ببین اینطور مشکلت حل میشه ؟


System.Windows.Forms.Application.DoEvents()
System.Threading.Thread.Sleep(1000)

safura
دوشنبه 29 مرداد 1386, 10:16 صبح
من برای اینکار از یه حلقه while استفاده کردم که خروج آن با تایمر کنترل می شد اما تو اجرا، برنامه تو این حلقه می مونه و تایمر در حالی که فعاله حلقه رو کنترل نمی کنه! کد برنامه اینطوری:
timer1.Start();
while(flag==false);


privatevoid timer1_Tick(object sender, EventArgs e)
{
f();
flag = true;
timer1.Stop() ;
}

اما نمی دونم چرا مقدار flag اصلا تغییر نمی کنه و برنامه تو while می مونه.
شما دوست عزیز شاید اگر از یک حلقه while که برای مدتی هیچ کاری نمیکنه استفاده کنید مشکلتون حل بشه:
مثلا int i=0;
while(i<10000)i++;