PDA

View Full Version : تکرار کد ها هر 5 دقیقه



x_p_sp2
شنبه 18 دی 1389, 20:34 عصر
با سلام خدمت دوستان عزیز
من میخوام توی برنامه ام هر 5 دقیقه یک کار مشخصی رو تکرار کنم
لطفا منوراهنمایی کنید.
ممنون

abbas.oveissi
شنبه 18 دی 1389, 21:00 عصر
با سلام خدمت دوستان عزیز
من میخوام توی برنامه ام هر 5 دقیقه یک کار مشخصی رو تکرار کنم
لطفا منوراهنمایی کنید.
ممنون

از تایمر استفاده کن،داخل toolbox میتونی پیداش کنی

rezatati
شنبه 18 دی 1389, 22:04 عصر
کافی است که خاصیت Interval اون رو به 5000 تنظیم کنی و خاصیت Enabled اونو به True ست کنی و در روی تایمر دابل کلیک کنی و کدی که می خواهی هر 5 ثانیه اجرا بشه رو اونجا بنویسی

private void timer1_Tick(object sender, EventArgs e)
{
//Your code here
}

meysamrt
شنبه 18 دی 1389, 22:53 عصر
همونطور که rezatati عزیز گفت عمل کن منتها مقدار Interval رو با 300,000 تنظیم کن

Rejnev
شنبه 18 دی 1389, 23:00 عصر
اولا هر 5 دقيقه خواستن نه هر 5 ثانيه. كه مطمئن نيستم اينتر-ول تايمر تا پنج دقيقه بكشه!
تايمر يك مشكلي داره(البته مشكل نيست بلكه محدوديته) و اون اينه كه مثل صدا زدن يك تابع، تا وقتي كه كار تابع تموم نشه، ساير بخشهاي برنامه از كار ميفته(البته اگه كاري كه تايمر انجام ميده طولاني باشه مثل بك آپ گيري از ديتابيس حجيم و فشرده كردن اون و ...)
پيشنهاد من استفاده از نخ هست:


Public Form1()
{
Thread t=new Thread(backup);
t.Start();
}

void backup()
{
while(true)
{
//do ur jobs and then...
Thread.Sleep(TimeSpan.FromMinutes(5));
}
}

meysamrt
شنبه 18 دی 1389, 23:10 عصر
جناب rejnev عزیز.
اولا تایمر خودش یک Thread ایجاد میکنه و تا هر زمانی که بخواید جواب میده.
ثانیا کد شما هم Thread رو میخوابونه همون کاری که تایمر داره انجام میده

x_p_sp2
یک شنبه 19 دی 1389, 09:11 صبح
باتشكر از همه دوستان كه به اين زودي جوابم رو داديد.


بهشت برنامه نويسان پارسي

http://barnamenevis.org

Rejnev
یک شنبه 19 دی 1389, 22:10 عصر
جناب meysmart
Tick خوردن تایمر مثل صدا زدن تابع می مونه. خط جاری برنامه به تابع منتقل میشه و بعد از اتمام به صدا زننده بر میگرده.
ولی Thread به اینصورت نیست و موازی با برنامه اجرا میشه.
اگه فکر میکنید کارتون نیاز به موازی بودن با پردازش جاری داره از thread استفاده کنید. در غیر اینصورت تایمر هم کار راه انداز خواهد بود.
مثلا حتما با کند بودن لود شدن گزارش کریستال ریپورت برخوردید که برنامه تا زمانی که گزارش لود بشه توی اصطلاحا هنگ قرار میگیره(در واقع هنگ نیست بلکه UI پاسخ نمیده)
حالا اگه گزارش رو توی یک نخ دیگه بندازید، کاربر ضمن کار با سایر بخشها، منتظر لود گزارش میمونه که زیاد آزار دهنده نیست.

ali.rezaei7
یک شنبه 19 دی 1389, 23:45 عصر
اولا تایمر خودش یک Thread ایجاد میکنه و تا هر زمانی که بخواید جواب میده.

من با این گفته مخالف هستم. چون در این صورت، تایمر توانایی استفاده از اجزای Thread فرمی که توش قرار گرفته رو نداره.(مانند کنترل ها، توابع).
اگر هم فرض براین باشه که تایمر یه Thread پشته پرده ایجاد میکنه و بعد دستوراتو داخل اون قرار میده، دراین صورت چرا روی Thread فرم که هیچ ربطی به Thread تایمر نداره تاثیر می زاره؟ و در دستورات سنگین باعث قفل شدن فرم میشه؟

اما در مورد سوالی که دوستمون پرسیدن؛ به نظر من بستگی به حجم دستوارتت داره، اگه انقدر سنگینه که برنامتو، دچار وقفه می کنه، بهتره از Thread استفاده کنی، درغیر این صورت همون تایمر کارتو راه مینداره.

jigily
چهارشنبه 18 خرداد 1390, 11:09 صبح
تايمر زمان زياد قبول نميكنه؟ من ميخوام هر يك ساعت برنامم اطلاعات را داخل ديتا بيس ذخيره كنه...
از thread استفاده كردم اما جواب نميده از كدي كه قبل sleep ميخوام اجراش كنم ارور ميگيره..

Felony
چهارشنبه 18 خرداد 1390, 13:44 عصر
اولا تایمر خودش یک Thread ایجاد میکنه و تا هر زمانی که بخواید جواب میده.
خیر ، شئ Timer ترد جدید ایجاد نمیکنه بلکه دستورات شما رو در Context ترد اصلی ( Main Thread ) اجرا میکنه پس برنامه در هر دور اجرای رویداد تایمر تا به پایان رسیدن روند اجرای دستورات این رویداد فریز میشه مگر اینکه دستورات داخل تایمر نیاز به performance بالایی برای اجرا نداشته باشن .