سلام
من چه جوری می تونم زمان اجرای برنامه رو محاسبه کنم.
یه چیزی شبیه تایمر می خوام که اول اجرای برنامه استارت بشه و پایانش استاپ بشه و توی خروجی طول زمان رو مثلا بر اساس ثانیه نشون بده.
سلام
من چه جوری می تونم زمان اجرای برنامه رو محاسبه کنم.
یه چیزی شبیه تایمر می خوام که اول اجرای برنامه استارت بشه و پایانش استاپ بشه و توی خروجی طول زمان رو مثلا بر اساس ثانیه نشون بده.
سلام
یه راهش اینه که تایمر بذاری و خاصیت interval اونو بذاری 1000 میلی ثانیه و متغیری رو تعریف کنی از نوع صحیح با لود شدن فرم تایمر استارت بشه و در رویداد tick تایمر یه واحد به متغیرت اضافه کنی (برای این خوبه که بخوای لحظه به لحظه توی فرم نشون بدی چقد از اجرای برنامه گذشته )
اگه میخوای اطلاعات توی بانک ذخیره بشه یا فایلی میتونی با استفاده از کلاس های TimeSpam و DateTime هنگام اجرای برنامه و خروج زمان رو بگیری و با تفریقشون مقدار استفاده رو بدست بیاری
موفق باشی
ابتدا مثلاً یک ;public int timercount تعریف میکنی یک کنترل تایمر هم میگذاری خاصیت Enabled را true میکنی و خاصیت Interval را برابر 1000 میکنی در رویداد tick این کنترل مینویسی ;++timercount
و در نهایت در رویداد Closing فرمت کد زیر رو وارد میکنی :
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
;timer1.Enabled = false
;(()MessageBox.Show(timer.ToString
}
امیدوارم مشکلنان حل شده باشد .
سلام
Timer روش هزینه بری است از کلاس Stopwatch استفاده کن چون دقیقاً برای محاسبه زمان اجرا طراحی شده است:
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main(string[] args)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Thread.Sleep(10000);
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
Console.WriteLine("RunTime " + elapsedTime);
}
}
یه متغیر از نوع int توی کلاس فرمت تعریف کن و در رویداد تیک تایمر یک واحد به counter اضافه میشه و توی لیبل نمایش میدهمیشه اون راه اول رو بیشتر و با کد توضیح بدید.
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
int counter;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
counter++;
label1.Text = counter.ToString();
}
}
}
برای پروژه ویندوز فرم کافیه در کلاس program قبل و بعد از apllication.run چند خط اضافه کنیدstopwath.Start();
Application.Run(new Form1());
stopwath.Stop();
MessageBox.Show("Duration: " + stopwath.Elapsed.Duration());
Timer1_Tick رویداد تایمر هست و تایمر رو توی Form_Load فعال کنیدکنترل timer1-tick در چه صورت اجرا میشه؟
والا عنوان تاپیک در مورد "محاسبه زمان اجرای برنامه" هست نه یک متد. ولی در هر صورت اگر دقت میکردید خودتون میتونستید راه حل رو پیدا کنید. کافیه stopwatch رو با متد restart ران کنید تا هر بار زمان رو از ابتدا محاسبه کنه. قبل و بعد از فراخوانی تابع :static Stopwatch stopwatch = new Stopwatch();
private void button18_Click(object sender, EventArgs e)
{
stopwatch.Restart();
//Thread.Sleep(5000);
// Call your method here
stopwatch.Stop();
MessageBox.Show("Duration: "+ stopwatch.Elapsed.Duration());
}
ببینید اخه من نمیخوام یه بار از این تایمر استفاده کنم که توی form load فعالش کنم. من می خوام هر با که یکی از متد هام اجرا میشه. این تایمر از اول محاسبه کنه
بنابراین من اول متدم تایمر رو فعال کردم و اخرش غیرفعال و بعد از غیر فعال کردنش ، توی همون متد مقدار اون رو چاپ کردم. اشتباهه؟
کافیه هر جا که خواستین از اول محاسبه بشه مقدار counter رو صفر کنیدببینید اخه من نمیخوام یه بار از این تایمر استفاده کنم که توی form load فعالش کنم. من می خوام هر با که یکی از متد هام اجرا میشه. این تایمر از اول محاسبه کنه
اگه قرار نیست لحظه به لحظه زمان نمایش داده بشه از کلاسی که دوستان ارائه کردن استفاده کنید بهتره
تایمری رو که اضافه کردین کلیک کنید و در پنجره ی Properties قسمت Event را انتخاب کن و روی رویداد timer_Tick دابل کلیک کن و اونجا دستورات مربوط به اضافه کردن به تایمر و نمایش اون در لیبل رو بنویس و هر جایی که خواستی تایمر فعال بشه مقدار counter هم صفر کن ( مثلا با زدن کلیدی )ممنون ولی همچنان صفر رو در خروجی نمایش میده!
ولی در خروجی صفر نمایش داده میشه فقط. شاید چون زمانش کمتر از 1 ثانیه یا خود همون 1 ثانیه هست. درسته؟ باید چی کار کنم؟
Stopwatch sw = new Stopwatch();
label1.Text = sw.Elapsed.Milliseconds.ToString();
اینو امتحان کن بینم جواب میگری
من اینو نوشتم و صفر نمایش داده. ببینید کجاشو اشتباه کردم
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(1);
}
stopwatch.Stop();
TimeSpan ts = stopwatch.Elapsed;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
txt7.Text = elapsedTime.ToString();
private void Form1_Load(object sender, EventArgs e)
{
Stopwatch sw = new Stopwatch();
sw.Start();
Thread.Sleep(100);
sw.Stop();
label1.Text = sw.Elapsed.ToString();
}
از این کد میتونی نمونه بگیری
قبل از شروع فرایند مورد نظر که میخوای زمان اجراشو بگیری Stopwatch رو start میکنی و با تموم شدن فرایند stop میکنی و مقدارشو نشون میدی امتحانش کردم 99 میلی ثانیه رو نشون داد
در ضمن نیازی به تعریف رشته و StringFormat و .. نیست کافیه که مستقیما مثل کد بالا با متد ToString تبدیل به رشته کنی خودش ساعت و دقیقه و ..... و حتی میلی ثانیه رو نشون میده که اگه بخوای میتونی مثلا این مقدار تبدیل به ثانیه کنی یا به روز نشون بده ، دقیقه و ...
label1.Text = sw.Elapsed.TotalSeconds.ToString();