PDA

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



csharpdoost
چهارشنبه 26 مرداد 1401, 17:50 عصر
دوستان سلام. یه برنامه نوشتم که حدود دو دقیقه طول میکشه تا خروجی بده. یه تایمر گذاشتم که از زمانی که دکمه اجرا زده میشه تا پایان برنامه آن رو شمارش کنه و زمان دقیق اجرای برنامه رو کاربر ببینه. اما مشکل اینجاس که تایمر عمل نمیکنه و بعد از اتمام برنامه، شروع به کار میکنه. دوستان میتونن راهنمایی کنن؟


int seconds = 0;
int minutes = 0;
int hours = 0;
private void timer1_Tick(object sender, EventArgs e)
{
if (seconds == 60)
{
seconds = 0;
if (minutes == 60)
{
minutes = 0;
hours++;
}
else
{
minutes++;
}
}
else
{
seconds++;
}
label1.Text = (hours > 9 ? hours + "" : "0" + hours) + ":"
+ (minutes > 9 ? minutes + "" : "0" + minutes) + ":"
+ (seconds > 9 ? seconds + "" : "0" + seconds);
}



private void btn_EXE_Click(object sender, EventArgs e)
{

if (timer1.Enabled)
{
timer1.Enabled = false;
button1.Text = "ادامه";
}
else
{
timer1.Enabled = true;
button1.Text = "توقف";
}

شروع اجرای برنامه ...
.
.
.
پایان برنامه

}

mmbguide
چهارشنبه 26 مرداد 1401, 22:58 عصر
سلام

پیشنهاد میکنم برای ارزیابی زمان انجام یک فرآیند از Stopwatch استفاده کنید. در زمان شروع برنامه اون را start کنید و در هر جای برنامه که نیاز بود اون را stop کنید و از مقدار elapsed میتونید برحسب معیارهای مختلف خروجی بگیرید (ساعت، دقیقه و یا ثانیه و ...). کلاس Stopwatch در فضای System.Diagnostic قرار دارد:

using System.Diagnostics;


void StopwatchUsingMethod()
{
var timer = new Stopwatch();
timer.Start();


//کدهای برنامه


timer.Stop();


TimeSpan timeTaken = timer.Elapsed;
string result= "Time taken: " + timeTaken.ToString(@"m\:ss\.fff");
}


لینک زیر را ببینید:
https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.stopwatch?view=net-6.0

اگر در یک کلاس متغیر را در سطح فرم تعریف کنید میتونید از متدهای مختلف start کنید و در متدهای دیگه اون را stop کنید.

ROSTAM2
پنج شنبه 27 مرداد 1401, 08:23 صبح
سلام.
توجه کنید، زمان اجرای برنامه در StartTime از Process موجود هست.

https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.starttime?view=net-6.0#system-diagnostics-process-starttime

csharpdoost
پنج شنبه 27 مرداد 1401, 08:59 صبح
ممنونم دوست عزیزکمک خوبی بود . برای نمایش زمان در لحظه اجرای برنامه فکر کنم باید از thread استفاده کنم.

csharpdoost
پنج شنبه 27 مرداد 1401, 09:22 صبح
سلام.
توجه کنید، زمان اجرای برنامه در StartTime از Process موجود هست.

https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.starttime?view=net-6.0#system-diagnostics-process-starttime


دوست عزیز ممنون. متوجه نشدم از این چجوری باید استفاده کنم. فکر میکنم به thread مربوط میشه میتونم ازش استفاده کنم.

ROSTAM2
پنج شنبه 27 مرداد 1401, 09:34 صبح
من هم سوال شما رو درست متوجه نشدم! تایمر رو برای مدت زمان اجرای برنامه می خوای؟!


https://stackoverflow.com/questions/10161088/get-elapsed-time-since-application-start

mmbguide
جمعه 28 مرداد 1401, 22:15 عصر
دوست عزیز ممنون. متوجه نشدم از این چجوری باید استفاده کنم. فکر میکنم به thread مربوط میشه میتونم ازش استفاده کنم.

بله اگر برنامه شما در Thread جاری درگیر باشه و بخواهید در UI اطلاعات را همزمان نمایش بدید باید در یک Thread دیگه عملیات مجزا را انجام بدید و بعد توسط delegate یک شیء به ویژگی های اون دسترسی داشته باشید.