PDA

View Full Version : مشکل در لود فرم در رویداد Tick تایمر



Mansoor92
پنج شنبه 26 دی 1392, 21:16 عصر
سلام خدمت همه دوستان

من میخوام یک ساعت از دیتابیس چک بشه و اگر با ساعت سیستم برابر بود یک فرم جدید برام لود بشه

حالا من اومدم یک تایمر روی فرم گذاشتم و این لود فرم جدید رو توی رویداد Tick اون نوشتم اما یک مشکلی

وجود داره اونم اینکه فرم بصورت متوالی و پشت سرهم 100بار لود میشه...من برای رفع این مشکل اومدم توی

رویداد Tick آخر دستورات لودفرم تایمر رو stop کردم حالا اگربخام دوباره اونو استارت کنم دقیقا استارت دوبارش

رو کجا بنوییسم تا دوباره عملیات چک کردن انجام بشه؟

ممنون میشم راهنمایی کنید

patrick5053
پنج شنبه 26 دی 1392, 21:21 عصر
سلام
وقتی یه ساعتی رو در دیتابیس چک میکنی که باساعت سیستم یکی باشه که یک بار اتفاق میفته و تایمر یک بار اون رو برابر میتونه پیدا کنه چطور چندبار فرم لود میشه؟
بیشتر توضیح میدی میخوای چیکار کنی؟

Mansoor92
پنج شنبه 26 دی 1392, 21:45 عصر
سلام
وقتی یه ساعتی رو در دیتابیس چک میکنی که باساعت سیستم یکی باشه که یک بار اتفاق میفته و تایمر یک بار اون رو برابر میتونه پیدا کنه چطور چندبار فرم لود میشه؟
بیشتر توضیح میدی میخوای چیکار کنی؟
سلام

ببینید وقتی توی دیتابیس مثلا 40 فیلد وجود داره با ساعت های متفاوت لازمه برای هرکدومشون چک بشه که کدومش باساعت سیستم برابر هست و بعدش فرم لود بشه...من تیک تایمر روی 1000 گذاشتم وکدی رو هم که نوشتم به این صورت هست


private void timer2_Tick(object sender, EventArgs e)
{
var q = db.tbl_Ersal.First(c => c.TET == true);
if (q.SaatCalc == DateTime.Now.ToShortTimeString())
{
frm_R frm = new frm_R();
frm.ShowDialog();
AdadEditAdd.Change = 1;
}
timer2.Stop();
}

matin.soft
پنج شنبه 26 دی 1392, 22:30 عصر
شما از یک آرایه استفاده کن و زمانهای موجود در پایگاه داده را در آرایه بریز اینطوری دیگه لازم نیست هر ثانیه با دیتابیس کوئری بگیری و سرعت بالا می ره و اینکه فرمهای زیادی باز میشه بدلیل اینه که در کدت مشکل داره.از تریس استفاده کنید برای رفع مشکل.
موفق باشید

Mansoor92
پنج شنبه 26 دی 1392, 22:35 عصر
شما از یک آرایه استفاده کن و زمانهای موجود در پایگاه داده را در آرایه بریز اینطوری دیگه لازم نیست هر ثانیه با دیتابیس کوئری بگیری و سرعت بالا می ره و اینکه فرمهای زیادی باز میشه بدلیل اینه که در کدت مشکل داره.از تریس استفاده کنید برای رفع مشکل.
موفق باشید

ممنونم که پاسخ دادید

میشه لطفا یکم بیشتر توضیح بدید
اگر نمونه کدی هست لطف کنید و قرار بدید..

ممنونم ازتون

matin.soft
پنج شنبه 26 دی 1392, 22:56 عصر
دوست عزیز شما برای ایجاد آلارم می خواهید این کار و بکنید درسته؟
پس موقع لود فرم ستونی از دیتابیستون که داده های مربوط به زمان ذخیره شده رو بخونید و تو یه آرایه ذخیره کنید.سپس توی رویداد تیک عمل مقایسه رو انجام بدید خیلی سادست.

sagggad
جمعه 27 دی 1392, 19:42 عصر
باعرض سلام
راستش من دقیق متوجه نشدم
اما فک کنم شما نباید این کار رو میکردید
میتونید برا تایمر شرط بذارید که اگر خصوصیت Visible فرم برابر False بود دستورات رو انجام بده در غیر اینصورت انجام نده
نه این که تایمر رو استوپ کنید
باز هم بیشتر توضیح بدید
موفق باشید:لبخندساده:

samsam_ninja
جمعه 27 دی 1392, 20:01 عصر
سلام
اولا اگه میخوای به صورت خطی اجرا بشه چرا از تایمر استفاده میکنی؟؟؟ باید از ترد استفاده کنی
دوما بهتره که همیشه با enable تایمر کار کنی نه اینکه استپش کنی ، اصلا منطق برنامت اینو ایجاب میکنه .
3- این سوال هم اینجا بوجود میاد که آیا فقط یک رکورد زمانش با زمان فعلی سیستم برابره؟؟؟
4 - جایی که تایمرت رو استارت میکنی رو هم کدش رو بزار تا بیشتر راهنماییت کنم!

Mansoor92
جمعه 27 دی 1392, 20:11 عصر
سلام

من توی دیتابیسم ساعت های متفاوتی ذخیره میشه حالا باید چک بشه که اگر ساعت سیستم برابر ساعت سیو شده توی دیتابیس بود یک فرم باز بشه و یک آهنگ اجرا بشه

برای این کارم من اومدم یک تایمر گذاشتم وتوی فرم لود استارتش کردم ...اینتروال تایمر رو هم روی 1000 گذاشتم

مشکل اینجاست که اگر ساعت برابری کرد فرم بصورت پشت سرهم و 100 بار اجرا میشه

ممنون میشم راهنمایی کنید

sagggad
جمعه 27 دی 1392, 20:22 عصر
خوب گفتم که شرط بذارید براش به این صورت:

if (form2.Visable == false)
{
form2.Visable = true
}

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

samsam_ninja
جمعه 27 دی 1392, 20:36 عصر
اگه کد درون تایمر همونیه که بالا گذاشتی باید کد استپ رو درون بلوگ شرطت بزاری که فقط در صورت رفتن درون شرط اجرا بشه ، این طور که شما گذاشتی عر بار که تایمر تیک فعال میشه اجرا خواهد شد ، شما هم به جای stop از enable استفاده کن ببین جواب میگیری اگه نشد برنامت رو ضمیمه کن تا درستش کنم واست...!!!

Mansoor92
جمعه 27 دی 1392, 21:06 عصر
اگه کد درون تایمر همونیه که بالا گذاشتی باید کد استپ رو درون بلوگ شرطت بزاری که فقط در صورت رفتن درون شرط اجرا بشه ، این طور که شما گذاشتی عر بار که تایمر تیک فعال میشه اجرا خواهد شد ، شما هم به جای stop از enable استفاده کن ببین جواب میگیری اگه نشد برنامت رو ضمیمه کن تا درستش کنم واست...!!!

بسیار ممنونم

حالا دوباره کجا باید تایمر enable ،true بشه؟

samsam_ninja
جمعه 27 دی 1392, 21:13 عصر
هر جا قبلا start میکردی حالا بگو که timer.enable=true;

اگه هم میخوای با بسته شدن اون فرمه تایمر فعال بشه یه پروپرتی تو فرمت بزار و قبل از نمایش دادن فرمت اون پروپرتی رو با مقدار enable تایمر که باید فالس شده باشه برابر کن بعدش تو formclosing اون فرم مقدار پروپرتی رو true کن...!!!

sagggad
جمعه 27 دی 1392, 21:23 عصر
مطمئنید بین Enabe=False و استوپ تفاوتی هست؟

samsam_ninja
جمعه 27 دی 1392, 21:32 عصر
مطمئنید بین Enabe=False و استوپ تفاوتی هست؟

بزار اینجوری واست بگم

تایمر به ازای هر فاصله زمانی که واسش تعریف میکنید یک بار اجرا میشه
اگر اونو غیر فعال کنید کلا دیگه اجرا نمیشه
ولی اگه اونو استپ کنید فقط همین اجرایی که در جریانه متوقف میشه و کار به کارکرد اصلی تایمر نداره و تایمر بعد از گذشت اون فاصله زمانی دوباره اجرا میشه

sagggad
جمعه 27 دی 1392, 21:34 عصر
مطمئنید؟
من تا به حال این موضوع رو نشنیدم
اکثرا گفته میشه این تابع به جای Enable و برای راحت شدن کار استفاده میشه...

samsam_ninja
جمعه 27 دی 1392, 21:51 عصر
اصلا داداش این کارو بکن ببین به دردت میخوره

تو بلوک دستور شرطت بنویس

timer1.Enabled = false;
new Form2().ShowDialog();
timer1.Enabled = true;

samsam_ninja
جمعه 27 دی 1392, 21:57 عصر
مطمئنید؟
من تا به حال این موضوع رو نشنیدم
اکثرا گفته میشه این تابع به جای Enable و برای راحت شدن کار استفاده میشه...

اه ببخشید دوست عزیز من با یه چیز دیگه که دقیقا مثل تایمره اشتباه گرفتم
ببین فرقش اینه وقتی استپ صدا میزنی تا وقتی به آخرین دستور بلوک نرسیدی تایمر عمل میکنه ولی وقتی enabled رو صدا میزنی بلا فاصله تایمر غیر فعال میشه ولی همین اجرا رو تاآخر میره
خودت یه msgBox رو تو تایمر بزار و بعدش تایمر استپ کن ولی حواست باشه تایمر رو با استارت فعال کنی نه enabled!!!!

samsam_ninja
جمعه 27 دی 1392, 21:58 عصر
اه ببخشید دوست عزیز من با یه چیز دیگه که دقیقا مثل تایمره اشتباه گرفتم
ببین فرقش اینه وقتی استپ صدا میزنی تا وقتی به آخرین دستور بلوک نرسیدی تایمر عمل میکنه ولی وقتی enabled رو صدا میزنی بلا فاصله تایمر غیر فعال میشه ولی همین اجرا رو تاآخر میره
خودت یه msgBox رو تو تایمر بزار و بعدش تایمر استپ کن ولی حواست باشه تایمر رو با استارت فعال کنی نه enabled!!!!

یعنی اینو بنویس


private void timer1_Tick(object sender, EventArgs e)
{
MessageBox.Show("asdas");
timer1.Stop();
MessageBox.Show("safdsfsd");
}

private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}