PDA

View Full Version : سوال: ایجاد delay در اجرای دستورات



pbiuki630
سه شنبه 08 دی 1388, 13:54 عصر
سلام

اگر بخوام بین اجرای دستورات توی یه صفحه تاخیری به وجود بیاد چی کار باید کرد؟

mehdi.mousavi
سه شنبه 08 دی 1388, 13:56 عصر
سلام
اگر بخوام بین اجرای دستورات توی یه صفحه تاخیری به وجود بیاد چی کار باید کرد؟


سلام.

System.Threading.Thread.Sleep(1000);

باعث میشه تا Thread فعلی یک ثانیه از کار بیفته.

behzad1986
سه شنبه 08 دی 1388, 13:59 عصر
سلام به جز روش thread می تونید از حلقه تکرار هم استفاده کرد
for(int i=numer1 ;i<number2;i++);

pbiuki630
سه شنبه 08 دی 1388, 14:05 عصر
دوستان فرض کنید که یه باتن دارم که توش یه فرم میبندم و بعد میخوام یه فرم رو باز کنم،میخوام بین اینها یه تاخیری به وجود بیاد

M.YasPro
سه شنبه 08 دی 1388, 14:19 عصر
سلام به جز روش thread می تونید از حلقه تکرار هم استفاده کرد
for(int i=numer1 ;i<number2;i++);

اینکار کاملا غیر منطقی و نا کارآمد هست .

mehdi.mousavi
سه شنبه 08 دی 1388, 15:07 عصر
سلام به جز روش thread می تونید از حلقه تکرار هم استفاده کرد
for(int i=numer1 ;i<number2;i++);

سلام.
حقله تکرار باعث بالا رفتن CPU Usage میشه، اما Sleep، واقعا یک Thread رو به Wait State میبره و باعث از کار افتادن Thread میشه. بنابراین استفاده از حلقه تکرار به هیچ وجه توصیه نمیشه.

موفق باشید.

mehdi.mousavi
سه شنبه 08 دی 1388, 15:09 عصر
دوستان فرض کنید که یه باتن دارم که توش یه فرم میبندم و بعد میخوام یه فرم رو باز کنم،میخوام بین اینها یه تاخیری به وجود بیاد

خوب، فرم رو ببندید (Close) سپس Sleep کنید، و در نهایت فرم دیگه رو Show کنید!

اَرژنگ
چهارشنبه 09 دی 1388, 05:52 صبح
دوستان فرض کنید که یه باتن دارم که توش یه فرم میبندم و بعد میخوام یه فرم رو باز کنم،میخوام بین اینها یه تاخیری به وجود بیاد


تا حالا هیچ وقت به این مشکل که یک فرم زیادی تند باز میشه به عنوان یک مشکل بر نخوردم.

مشکل اصلی چی هست که فکر میکنید حلش این روش (اشتباه) است؟

reza_ali202000
شنبه 26 فروردین 1391, 02:35 صبح
اسلیپ کل برنامه رو قفل میکنه برا چند سانیه. ولی یه چیزی میخوام که برنامه قفل نشده در عین حال چند ثانیه طول بکشه. دقیقا شبیه delay در ویژوال بیسیک.

رافعی مهدی
شنبه 26 فروردین 1391, 08:22 صبح
قبل از هر چیز پیشنهاد میکنم، پاسخ آقای آرژنگ رو به عنوان یک پیش کسوت حرفه ای بدهید. شاید اصلاً به این کار نیازی نداشته باشید.

اما با این فرض که واقعاً به انجام این کار نیاز باشه، در Net 4.5. میتوانید از await استفاده کنید (برای اطلاعات بیشتر اینجا (http://msdn.microsoft.com/en-us/vstudio/gg316360) رو ببینید.) اما اگر استفاده از نسخه های Net. بالاتر از 4 مقدور نیست، چند روش دیگه وجود داره که البته هیچ کدوم به خوبی روش فوق نیست.

یکی از پر کاربردترین و در عین حال اشتباه ترین روشهایی که (متأسفانه حتی در همین سایت (http://barnamenevis.org/showthread.php?95001-1001-%D9%86%DA%A9%D8%AA%D9%87-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&p=467568#post467568) به عنوان نکته آموزشی معرفی شده بود که بعداً (البته خیلی بعدش) توسط مدیر کل سایت اصلاح (http://barnamenevis.org/showthread.php?194398-%D9%87%D8%B2%D8%A7%D8%B1-%D9%88-%DB%8C%DA%A9-%D8%A7%DB%8C%D8%B1%D8%A7%D8%AF-%D8%AF%D8%B1-%D8%AA%D8%A7%D9%BE%DB%8C%DA%A9-%D9%87%D8%B2%D8%A7%D8%B1-%D9%88-%DB%8C%DA%A9-%D9%86%DA%A9%D8%AA%D9%87-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE!&p=865882#post865882) شد!) برای ایجاد تأخیر در برنامه استفاده میشه متد Application.DoEvents هست که بی شک بیش از اینکه بخواهد مشکلی رو حل کنه، خودش ایجاد مشکل میکنه. بنابراین اولین توصیه اینه که هرگز (در اکثریت قریب به اتفاق موارد) از این متد استفاده نکنید.
اما در صورتی که در برنامه UI Thread رو با استفاده از متد Sleep به حالت Suspend دربیاورید، همه چیز روی GUI قفل میشه که باز هم روش مناسبی نیست. (مگر اینکه مثلاً ابتدا فرم رو Close کنیم که در مواردی میتونه یک روش منطقی نباشه.)
بنابراین شاید استفاده از یک System.Windows.Forms.Timer بهترین کار ممکن باشه. برای این کار لازمه Interval مربوط به Timer رو (بر حسب میلی ثانیه) روی مقدار مورد نظر تنظیم کنید و پس از اولین Tick اون رو Stop کرده و ادامه عملیات رو انجام بدهید. (اگر با انجام این کار آشنا نیستید، پست بذارید تا دوستان راهنمایی کنند.)

sobhan01
سه شنبه 04 تیر 1392, 08:47 صبح
سلام من میخوام چند دستور رو که در یک حلقه افتاده تو یک باده ی زمانی مشخص اجرا بشه فکر می کنم از تایع dely استفاده می کنن لطفا راهنمائیم کنید