PDA

View Full Version : نحوه ی استفاده از تایمر



Mega7000
جمعه 12 خرداد 1385, 12:15 عصر
سلام
مخوام توی صفحه برنامم یه تایمر بگذارم که وقتی کاربر یه کلید رو کلیک می کنه شروع بکار کنه و وقتی دوباره همون کلید رو می زنه تایمر بایسته

Mehrafrooz
جمعه 12 خرداد 1385, 16:29 عصر
تایمر دو تا متد داره به نام start و stop و همینطور می تونی از enable هم استفاده کنی

once4ever
جمعه 12 خرداد 1385, 17:23 عصر
همونطور که گفتند تایمر همه چیز داره البته اگه بدونی که اینجوریه ;-)

Timer mytimer = new Timer();
mytimer.Start();

Mega7000
جمعه 12 خرداد 1385, 18:29 عصر
ممنون ،اما من این دستورات رو بلدم
چه طور باید روی صفحه زمان رو نشون بدم؟

Mehrafrooz
جمعه 12 خرداد 1385, 20:47 عصر
می تونی یک لیبل بزاری و یک عدد تعریف کنی در هر بار تیک زدن تایمر به اون یک واحد اضافه کنی

Mega7000
شنبه 13 خرداد 1385, 15:42 عصر
می شه دستورشو واسم بنویسین
من زیاد آشنا نیستم

Amir Oveisi
یک شنبه 14 خرداد 1385, 03:15 صبح
هر تایمر یه Tick داره که میگه هر چند میلی ثانیه تابع Tick تایمر اجرا بشه اول باید اونو تنظیم کنی
بعد تو رویداد Tick تایمر هر کاری که خواستی میذاری مثلا اگه تیک 1000 میلی ثانیه باشه باید تو رویداد تیک مثلا متغیر second رو که قبلا تعریف کردی +1 کنی و تو label نشون بدی.
حالا تو رویداد کلیک یه دکمه timre.Start رو فراخونی میکنی که باعث میشه تایمرت شروع به کار بکنه و بطور اتوماتیک تو هر زمان که بعنوان تیک داره خودشو فراخونی میکنه و second رو +1 میکنه و تو label نشون میده.
هر موقع هم خواستی تایمرت متوقف بشه از timer.Stop استفاده میکنی

sianooshonline
یک شنبه 14 خرداد 1385, 17:19 عصر
سلام به همه دوستان
من تا بحال با تایمر کار نکردم ولی چیزی که هست اینه که چطور میشه توی همون رویداد Click دو کار رو با هم انجام داد؟ وقتی Buttonکلیک بشه رویداد کلیک اجرا میشه اما چطوری میشه در یک رویداد هم Start و هم Stop رو انجام داد.اگه راهنمایی کنید ممنون میشم.
موفق باشید

Mehrafrooz
یک شنبه 14 خرداد 1385, 17:28 عصر
سلام به همه دوستان
من تا بحال با تایمر کار نکردم ولی چیزی که هست اینه که چطور میشه توی همون رویداد Click دو کار رو با هم انجام داد؟ وقتی Buttonکلیک بشه رویداد کلیک اجرا میشه اما چطوری میشه در یک رویداد هم Start و هم Stop رو انجام داد.اگه راهنمایی کنید ممنون میشم.
موفق باشید
می تونی از شرط استفاده کنی . اگر شرط درست بود استارت کنه و اگر نه استاپ کنه .

sianooshonline
یک شنبه 14 خرداد 1385, 18:21 عصر
با سلام
ممنون از راهنماییتون اما این یک مورد بدیهیه که باید از شرط استفاده کرد.
اما دراین مورد میشه بگین چجوری ازش استفاده میکنین؟
اگه راهنمایی کنید ممنون میشم.
موفق باشید

Amir Oveisi
یک شنبه 14 خرداد 1385, 23:23 عصر
bool start = true;
void myFn(bool startState)
{
if(start == true )
{
start = false;
//codes here
}
else if( start == false)
{
start = true;
//codes here
}
}
حالا تو رویداد کلیک :

MyFn(start);

sianooshonline
یک شنبه 14 خرداد 1385, 23:35 عصر
به همین سادگی!!!:لبخند:
به هر حال مرسی
موفق باشید

Amir Oveisi
یک شنبه 14 خرداد 1385, 23:41 عصر
ساده نبود مگه؟ :متعجب: :لبخند:
خدایی ساده بود دیگه :لبخند:

sianooshonline
دوشنبه 15 خرداد 1385, 14:41 عصر
سلام جناب Bermooda
ممنون از اینکه راهنمایی کردید . چرا خیلی ساده بود .آخه خودم این رو میتونستم حدس بزنم
اما دنبال راه بهتری بودم.
اما به هرحال از راهنماییتون بسیار ممنونم.
موفق باشید

Mega7000
دوشنبه 15 خرداد 1385, 18:24 عصر
آیا با هر بار کلیک نباید statrt=!start بشه؟
اینجور که نوشتین همیشه حالت true داره

sianooshonline
دوشنبه 15 خرداد 1385, 20:03 عصر
البته میشد کار رو ساده تر انجام داد ، اما برای درک بهتر فکر کنم اینجوری بهتر باشه.
همونطور که گفتم میشه با کد کمتری این کار رو کرد

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


bool startinfo;
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToLongTimeString();
}
private void button1_Click(object sender, EventArgs e)
{
if (label1.Text == DateTime.Now.ToLongTimeString())
{
startinfo = false;
Set(startinfo);
}
else
{
startinfo = true;
Set(startinfo);
}
}
private void Set(bool started)
{
if (started)
{
started = false;
timer1.Start();

}
else if (started == false)
{
timer1.Stop();
}
}
}
}

موفق باشید

dot_net_lover2
سه شنبه 16 خرداد 1385, 09:43 صبح
آیا با هر بار کلیک نباید statrt=!start بشه؟


روش درست و منطقی همینه .



value=!value

sianooshonline
سه شنبه 16 خرداد 1385, 13:11 عصر
کد بالا هم کار میکنه اما بهترین روش به نظر من اینه :


namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToLongTimeString();
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = !timer1.Enabled;
}
}
}

Amir Oveisi
سه شنبه 16 خرداد 1385, 22:46 عصر
البته من نمیدنوستم که منظور نوشتن کد بهینه هست !! شرمنده :لبخند:

Mega7000
چهارشنبه 17 خرداد 1385, 16:37 عصر
با تشکر از دوستان
اما من می خوام که مثل یه تایمر کار کنه(کرنومتر)، نه اینکه ساعت سیستمو نشون بده

Mehrafrooz
چهارشنبه 17 خرداد 1385, 17:18 عصر
با تشکر از دوستان
اما من می خوام که مثل یه تایمر کار کنه(کرنومتر)، نه اینکه ساعت سیستمو نشون بده
به جای ساعت سیستم می تونی یک متغیر از نوع int تعریف کنی و با هر بار تیک از اون کم یا زیاد کنی و در لیبل نشون بدی .
سوالای سخت سخت می پرسی ها :بامزه:

Mega7000
چهارشنبه 17 خرداد 1385, 18:14 عصر
اگه بلد بودم نمی پرسیدم!!!
هز تابع tick چطور باید استفاده کرد؟

Amir Oveisi
چهارشنبه 17 خرداد 1385, 18:20 عصر
خوب اینم مثل همیناس که دوستان گفتن !!!

Mega7000
پنج شنبه 18 خرداد 1385, 00:32 صبح
نمی دونم واقعا اینجا دوستان می خوان چیزی بهم دیگه یاد بدن یا اینکه سوادشونو به رخ هم بکشن؟
یا درست جواب بدین و کمک کنین یا لطفا انقدر مزه نندازین

عفت بزرگه
پنج شنبه 18 خرداد 1385, 08:03 صبح
یک تایمر روی فرم قرار دهید . خاصیت interval اون رو 1000 تنظیم کنید . روی timer کلیک کنید وارد رویدادی به نام timer_tick خواهید شد . هر کدی درون این رویداد می نویسید هر 1 ثانیه یکبار تکرار می گردد . مثلا یک متغیر public تعریف کنید و درون ْآن مثلا بنویسید اگر مثلا اسمش رو x گرفتید بزنید ++x . در هر 1 ثانیه 1 واحد به اون اضافه میشه.
حالا یک کلید بزارید روی صفحه و درون اون تایمر رو start کنید . مقدار int رو به text یک label نسبت بدین . حالا از لحظه start مرطبا یکی بهش اضافه می شه . هر موقع هم خواستین با یک کلید دیگه stop کنید . یا همون کلید رو بعد از start تبدیل به کلید stop کنید . اینکار رو با یک شرط انجام بدین وقتی start میشه یک متغیر رو true کنید و چک کنید اگه true بود روال stop اجرا بشه . اگه سوال دیگه ای دارید . بپرسید

Mega7000
پنج شنبه 18 خرداد 1385, 09:28 صبح
ممنون ازتون
یه سوال:
آیا تا قبل اینکه دستور timer1.stop() اجرا بشه،تایمر عددها رو تو label نشون میده؟

once4ever
پنج شنبه 18 خرداد 1385, 10:53 صبح
Mega7000 ,
دوست من همه بچه ها سعی میکنند چیزی بهم یاد بدهند ولی گاهی به دلیل اینکه فکر میکنند طرفشون اون موضوع رو بلد هست با یک اشاره رد میشن.
فکر کنم جواب آخر کامل بود.

آیا تا قبل اینکه دستور timer1.stop() اجرا بشه،تایمر عددها رو تو label نشون میده؟ تا قبل از ()timer1.stop هرچی داخل اون رویداد نوشته شده باشه (مثل تغییر لیبل) انجام میشه.

عفت بزرگه
پنج شنبه 18 خرداد 1385, 13:09 عصر
دوست من چیزی که گفتم رو امتحان کنید . قطعا به نتیجه خواهید رسید

Amir Oveisi
پنج شنبه 18 خرداد 1385, 19:15 عصر
بله تو هر بار تیک تایمر اون کدهایی که نوشتی اجرا میشن مگه اینکه کاذایی باشن که نیاز به زمان زیادی واسه اجرا دارن که اینجا بحث threading پیش میاد

Mega7000
جمعه 19 خرداد 1385, 09:19 صبح
فکر می کنم برنامه من مشکلش همین باشه،یعنی زمان زیادی طول می کشه
حالا اگه بخوام از threading استفاده کنم...
چطور؟

عفت بزرگه
جمعه 19 خرداد 1385, 09:23 صبح
threading دیگه به این سادگیها نیست . یکم زمان بره

once4ever
جمعه 19 خرداد 1385, 10:35 صبح
اگه بگی دقیقا چی میخوای درست کنی شاید بهتر راهنمایی بشی.
شاید یه فرم میخوای که چندتا کار انجام بده و تو این مدت زمان (انجام کارها) رو حساب کنه!

عفت بزرگه
جمعه 19 خرداد 1385, 10:40 صبح
من چند ساله سابقه تدریس دارم . وضعیت افراد زود دستم میاد مبحث تردها الان برای ایشون یک زوده.

Mega7000
جمعه 19 خرداد 1385, 12:45 عصر
ممنون آقای "عفت بزرگه"
همون طوری که آقای once4ever اشاره کردن:"یه فرم میخوای که چندتا کار انجام بده و تو این مدت زمان (انجام کارها) رو حساب کنه!"،کار من هم اینطوریه
ولی باید یاد بگیرم چون کارمو باید بزودی تحویل بدم.
اگه راهنماییم کنید ممنون می شم

once4ever
جمعه 19 خرداد 1385, 14:19 عصر
خوب برای شروع بگو چه کارهایی میخوای انجام بشه؟
بعضی کارها تو thread خیلی آسونه و بعضی کارها خیلی پیچیده.

Mega7000
جمعه 19 خرداد 1385, 15:04 عصر
یعنی چی چه کارهایی انجام بشه؟دقیقا چی رو واستون بگم؟
می شه واضح تر بگین

once4ever
جمعه 19 خرداد 1385, 15:52 عصر
مثلا میخوای کنترلی رو تغییر بدی ( لیبل تکست باکس و ...)
یا میخوای یک دیتا ستی رو پر کنی و...

Mega7000
جمعه 19 خرداد 1385, 18:41 عصر
اول یه فایل متنی می خونه از جایی و در یه لیست باکس نشون داده می شه،بعد یک سری محاسبات ریاضی انجام می شه و در همین حین یک سری اشکال گرافیکی کشیده می شه و دوباره پس از هر محاسباتی ریاضی این اشکال اصلاح شده و باز کشیده می شه...
حالا من یه چیزی مثله کرنومتر می خوام که این مدت زمان انجام این اعمال رو از اول تا پایان حساب کنه و نشون بده

عفت بزرگه
جمعه 19 خرداد 1385, 20:32 عصر
1- با همون تایمر هم میشه
2- از کجا فهمیدین من آقا هستم ؟‌ تو رو خدا بگید

once4ever
جمعه 19 خرداد 1385, 20:53 عصر
خوب وقتی کارت شروع میشه تایمرت رو استارت کن و وقتی تموم میشه تایمرت رو استوپ! کن.


2- از کجا فهمیدین من آقا هستم ؟‌ تو رو خدا بگید
یعنی شما آقا نیستید؟! :چشمک:

عفت بزرگه
جمعه 19 خرداد 1385, 21:00 عصر
آخه از روی عفت بزرگه چطوری آخه ؟‌

Mega7000
شنبه 20 خرداد 1385, 00:30 صبح
خب این طوری نمی شه،من امتحان کردم چون بار برنامه خیلی زیاده
حالا می شه بجای بحث threading رو توضیح بدین

once4ever
شنبه 20 خرداد 1385, 08:27 صبح
یعنی چی بار برنامه زیاده؟
thread نمیاد کارهاتو کم کنه. بلکه میتونی همزمان چندتا کار انجام بدی یا اینکه انجام دادن یه کاری (بستگی به نوع کار داره) مانع ادامه پیدا کردن برنامه ات نشه.

Mega7000
شنبه 20 خرداد 1385, 19:16 عصر
یعنی اینکه حجم عملیات ها زیاده و بار زیادی روی دوش سیستم....

Amir Oveisi
یک شنبه 21 خرداد 1385, 00:22 صبح
تو تالار C# در این مورد مطالب خوبی هست که واسه مقدمه بهتره بخونین در ضمن این لینکها هم میتونن مفید باشن:

http://msdn2.microsoft.com/en-us/library/ms173178.aspx

http://www.codeproject.com/csharp/threader.asp

Amir Oveisi
یک شنبه 21 خرداد 1385, 00:55 صبح
فکر کنم این مشکل شما با TimerCallBack حل بشه ( اینم از مباحث threading هستش) ایتارو ببین
http://geekswithblogs.net/geekusconlivus/archive/2006/05/29/80009.aspx

حسین حریری
شنبه 21 مرداد 1385, 14:18 عصر
Timer t = new Timer();
int delay = 1000;
int counter = 0;

private void Form1_Load( object sender , EventArgs e )
{
t.Interval = delay;
t.Tick += new EventHandler( shower );
//t.Enabled = true;
}

void shower( object sender , EventArgs e )
{
label1.Text = ( ++counter ).ToString();
}

private void button1_Click( object sender , EventArgs e )
{
if ( t.Enabled )
t.Stop();
else
t.Start();
}

sianooshonline
یک شنبه 22 مرداد 1385, 08:52 صبح
با کمال احترام به همه اساتید من فکر کنم این روش از همه بهتر باشه حالا بسته به جایی که میخواد استفاده بشه میشه تغییرش داد
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToLongTimeString();
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = !timer1.Enabled;
}
}
}