PDA

View Full Version : تایمر با ساعت همزمان نیست



ali_72
پنج شنبه 23 اردیبهشت 1395, 11:26 صبح
سلام
از کنترل تایمر با interval 1000 در فرم استفاده کردم
زمانکیه در برنامه تایم را فعال میکنم
زمانی ک نمایش میده با ساعت همزمان نیست (عقب تره)
این فاصله ب مرور بیشتر میشه
تا جائیکه استاپ میشه
البته برنامه در ترد جدا در حال ترسیم نمودار با داده های زیاد هست

syntiberium
پنج شنبه 23 اردیبهشت 1395, 13:45 عصر
از تایمر نباید اینجوری استفاده کنید . باید interval ش رو بیارید مثلا رو 100 و ساعت رو توی یه متغیر ذخیره کنید که 10 بار در ثانیه ساعت رو چک کنه که اگه ثانیه داخل متغیر با ثانیه چک شده فرق داشت اون وقت دستورات رو اجرا کنه و ساعت جدید رو دوباره توی همون متغیر ذخیره کنه .

ali_72
شنبه 25 اردیبهشت 1395, 14:48 عصر
از تایمر نباید اینجوری استفاده کنید . باید interval ش رو بیارید مثلا رو 100 و ساعت رو توی یه متغیر ذخیره کنید که 10 بار در ثانیه ساعت رو چک کنه که اگه ثانیه داخل متغیر با ثانیه چک شده فرق داشت اون وقت دستورات رو اجرا کنه و ساعت جدید رو دوباره توی همون متغیر ذخیره کنه .

خوب من قبلا اینطور استفاده میکردم
1000 میلی ثانیه برابر یک ثانیه است
تایمر با اینتروال 1000 در فرم استفاده میکردم و در رویداد تیک تایمر ب متغیر تعریف شده برای زمان یک واحد اضافه میکردم
ک این در 10 دقیقه اول خوبه
ولی در ساعت های طولانی عقب میافته و سرعتش خیلی کند میشه

از روشی ک شما گفتید استفاده کردم اینتروال برابر 100 گذاشتم
ولی فرقی نداشت ک بدتر هم شد. کجا اشتباه کردم؟


private void timer1_Tick(object sender, EventArgs e) {
if (DateTime.Now >= dt.AddSeconds(1))
{
dt = DateTime.Now;
if (_sec < 59)
_sec++;
else
{
_sec = 0;
_min++;
}
_lbl_timeText.Text = _min + ":" + _sec;
}
}

ژیار رحیمی
شنبه 25 اردیبهشت 1395, 18:18 عصر
private void timer1_Tick(object sender, EventArgs e)
{
//Interval timer =100
_lbl_timeText.Text = string.Format("{0}:{1}", DateTime.Now.Minute, DateTime.Now.Second);
}

Mahmoud.Afrad
شنبه 25 اردیبهشت 1395, 18:55 عصر
میتونید جایی که تایمر را استارت میکنید زمان رو بگیرید و در هر تیک تایمر زمان رو مجددا گرفته و اختلافش رو با زمان اولیه بدست بیارید.

syntiberium
یک شنبه 26 اردیبهشت 1395, 01:34 صبح
DateTime dt;
int co1;

private void Form1_Load(object sender, EventArgs e)
{
dt = DateTime.Now;
}

private void timer1_Tick(object sender, EventArgs e)
{
if (dt.Second != DateTime.Now.Second)
{
co1++;
textBox1.Text = co1.ToString();
dt = DateTime.Now;
}
}