دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
Class Library در سی شارپ
1404/01/10 -
دستور BREAK در پایگاه داده sql
1404/01/02 -
دستور CONTINUE در پایگاه داده SQL
1404/01/01 -
دستور WAITFOR در پایگاه داده SQL
1403/12/26 -
دستور GOTO در پایگاه داده SQL
1403/12/25 -
حلقه WHILE در پایگاه داده SQL
1403/12/24
کلاس Timer در سی شارپ

کلاس Timer در سی شارپ
کلاس Timer در سیشارپ برای اجرای یک عملیات به صورت دورهای یا با تأخیر مشخص استفاده میشود.
این کلاس در فضای نام System.Timers قرار دارد و به برنامهنویسان اجازه میدهد تا وظایفی را در فواصل زمانی مشخص اجرا کنند.
Timer میتواند در پسزمینه اجرا شود و نیازی به مداخله مستقیم کاربر ندارد.
برای تنظیم زمانبندی اجرا، از خاصیت Interval استفاده میشود و با متد ()Start و ()Stop میتوان تایمر را کنترل کرد.
برای استفاده از Timer، ابتدا یک نمونه از آن ایجاد کرده و یک رویداد Elapsed برای اجرای کد موردنظر تعریف میکنیم.
این رویداد پس از هر بار اتمام زمان تعیینشده، اجرا میشود.
به عنوان مثال، در یک برنامه میتوان از Timer برای بروزرسانی رابط کاربری یا ارسال درخواستهای خودکار به سرور استفاده کرد.
در نظر داشته باشید که اگر از Windows Forms استفاده میکنید، میتوان از System.Windows.Forms.Timer که مناسب اجرای درون UI Thread است، بهره برد.
ویژگیهای کلاس Timer
این کلاس از نوع System.Object ارثبری کرده و قابلیت استفاده از تایمرهای قابل تنظیم را به شما میدهد.
مهمترین ویژگیهای کلاس Timer عبارتند از:
-
Interval
این ویژگی زمان بین اجرای متدها را مشخص میکند. یعنی زمان بین هر بار فراخوانی متد مشخص شده است. -
Callback
این ویژگی به شما این امکان را میدهد تا متدی که قرار است در هر بار فراخوانی انجام شود را مشخص کنید. -
Enabled
این ویژگی نشان میدهد که آیا تایمر فعال است یا خیر. -
()Dispose
این متد برای آزادسازی منابع استفادهشده توسط تایمر به کار میرود.
نحوه ایجاد و استفاده از کلاس Timer
برای استفاده از کلاس Timer در سیشارپ باید از فضای نام System.Threading استفاده کنید.
در اینجا یک مثال ساده از نحوه استفاده از کلاس Timer آورده شده است.
مثال ساده
در این مثال یک تایمر تعریف میکنیم که هر 2 ثانیه یک پیام را در کنسول چاپ میکند.
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
// ایجاد تایمر
Timer timer = new Timer(PrintMessage, null, 0, 2000);
// انتظار برای توقف برنامه
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();
}
// متد callback که توسط تایمر فراخوانی میشود
private static void PrintMessage(object state)
{
Console.WriteLine("Hello, this message is printed every 2 seconds!");
}
}
توضیح کد
ابتدا فضای نام System.Threading را وارد میکنیم تا به کلاس Timer دسترسی پیدا کنیم.
یک شی از نوع Timer ایجاد میکنیم که متد PrintMessage را هر 2 ثانیه یکبار فراخوانی خواهد کرد.
متد PrintMessage به عنوان پارامتر callback به تایمر ارسال میشود.
تایمر بعد از شروع به کار، هر 2 ثانیه یکبار متد PrintMessage را فراخوانی میکند.
با استفاده از ()Console.ReadLine، از برنامه میخواهیم که به مدت نامحدود منتظر بماند تا زمانی که کاربر کلیدی را وارد کند و سپس برنامه پایان یابد.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
پارامترهای مهم کلاس Timer
در هنگام ایجاد شی Timer، باید از پارامترهای خاصی استفاده کنیم که به شرح زیر هستند:
-
callback
- متدی که باید هر بار فراخوانی شود. این متد باید یک پارامتر از نوع object دریافت کند.
-
state
یک شی از نوع object است که به متد callback ارسال میشود.
این پارامتر میتواند برای ارسال اطلاعات اضافی به متد استفاده شود. -
dueTime
زمان تأخیر قبل از اجرای اولین فراخوانی تایمر است. این زمان بر حسب میلیثانیه است. -
period
فاصله زمانی بین هر فراخوانی تایمر است، که این زمان نیز بر حسب میلیثانیه است.
استفاده از Timer با بیش از یک پارامتر
گاهی اوقات ممکن است بخواهید متد callback شما پارامترهایی را دریافت کند.
در این صورت میتوانید از پارامتر state برای ارسال اطلاعات اضافی به متد استفاده کنید.
مثال با پارامتر state
در این مثال، یک تایمر تعریف میکنیم که هر 3 ثانیه یک پیام متفاوت از پارامترهای ارسالشده چاپ میکند.
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
// تعریف اطلاعاتی که میخواهیم به متد ارسال کنیم
string message = "This is a custom message!";
// ایجاد تایمر
Timer timer = new Timer(PrintMessage, message, 0, 3000);
// انتظار برای توقف برنامه
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();
}
// متد callback که پارامتر state را دریافت میکند
private static void PrintMessage(object state)
{
string message = (string)state; // تبدیل پارامتر state به رشته
Console.WriteLine(message);
}
}
متدهای کلاس Timer
کلاس Timer چند متد مختلف دارد که به شما در کنترل تایمر کمک میکنند:
-
()Dispose
برای از بین بردن تایمر و آزادسازی منابع استفاده میشود.
timer.Dispose();
-
()Change
این متد میتواند برای تغییر زمان شروع و یا فاصله زمانی بین هر فراخوانی تایمر استفاده شود.
timer.Change(1000, 2000); // شروع پس از یک ثانیه و اجرای متد هر 2 ثانیه یکبار
-
()Wait
برای متوقف کردن تایمر استفاده میشود.
نکات مهم هنگام استفاده از Timer
-
Thread-Safety
کلاس Timer thread-safe است، یعنی میتوان از آن در برنامههایی که از نخهای مختلف استفاده میکنند، بدون نگرانی استفاده کرد. -
Precision
دقت تایمر به سیستم و بار پردازشی موجود بستگی دارد.
تایمرها همیشه دقیقاً در زمان تعیینشده اجرا نمیشوند، مخصوصاً در سیستمهای شلوغ. -
Stop Timer
پس از اتمام کار با تایمر، بهتر است آن را با استفاده از متد Dispose از بین ببرید تا منابع آن آزاد شوند. -
Main Thread
تایمر به طور پیشفرض در یک نخ جداگانه اجرا میشود، اما نتیجه آن میتواند در نخ اصلی (مانند کنسول) مشاهده شود.
مزایا و معایب استفاده از Timer
-
مزایا
-
سادگی در استفاده
تایمر به راحتی قابل استفاده است و نیازی به مدیریت نخها یا پیچیدگیهای اضافی ندارد. -
کنترل دقیق زمان
میتوانید زمانبندی دقیقی برای اجرای متدها تعیین کنید.
-
-
معایب
-
دقت پایین در شرایط خاص
در شرایطی که بار پردازشی زیاد است، تایمر ممکن است به صورت دقیق اجرا نشود. -
نیاز به مدیریت منابع
در صورت استفاده نادرست از Dispose، ممکن است تایمرها به درستی از حافظه آزاد نشوند و باعث مصرف بیهوده منابع شوند.
-
مثال پروژه محور از کلاس Timer در سی شارپ
پروژه: سیستم نظارت بر دما
فرض کنید شما یک سیستم نظارت بر دما دارید که باید هر 5 ثانیه وضعیت دما را بررسی کرده و در صورت تغییر بیش از حد، پیامی ارسال کند.
گامهای پروژه
- ایجاد کلاس TemperatureMonitor که وضعیت دما را کنترل میکند.
- استفاده از تایمر برای بهروزرسانی وضعیت دما به طور خودکار.
کد پروژه
using System;
using System.Threading;
class TemperatureMonitor
{
private Timer _timer;
private double _currentTemperature;
private double _lastRecordedTemperature;
public TemperatureMonitor()
{
_currentTemperature = 20.0; // دمای اولیه
_lastRecordedTemperature = _currentTemperature;
// ایجاد تایمر برای بهروزرسانی دما هر 5 ثانیه یکبار
_timer = new Timer(UpdateTemperature, null, 0, 5000);
}
// متد callback که بهطور دورهای دما را بهروزرسانی میکند
private void UpdateTemperature(object state)
{
// شبیهسازی تغییر دما
_currentTemperature += new Random().NextDouble() * 2 - 1; // تغییر تصادفی بین -1 و 1 درجه
// مقایسه دما و نمایش پیام در صورت تغییر زیاد
if (Math.Abs(_currentTemperature - _lastRecordedTemperature) > 1.0)
{
Console.WriteLine($"Warning: Temperature has changed significantly to {_currentTemperature}°C.");
_lastRecordedTemperature = _currentTemperature;
}
else
{
Console.WriteLine($"Current Temperature: {_currentTemperature}°C");
}
}
// متد برای توقف تایمر
public void StopMonitoring()
{
_timer.Dispose();
Console.WriteLine("Temperature monitoring stopped.");
}
}
class Program
{
static void Main(string[] args)
{
// ایجاد شی از کلاس TemperatureMonitor
TemperatureMonitor monitor = new TemperatureMonitor();
// منتظر ماندن برای پایان کار
Console.WriteLine("Monitoring temperature... Press Enter to stop.");
Console.ReadLine();
// توقف نظارت
monitor.StopMonitoring();
}
}
توضیحات کد
-
کلاس TemperatureMonitor:
این کلاس دارای دو ویژگی currentTemperature و lastRecordedTemperature است که دماهای جاری و آخرین دمای ثبت شده را نگه میدارد.
متد UpdateTemperature به طور دورهای هر 5 ثانیه فراخوانی میشود و دما را به روز میکند.
اگر تغییر دما بیشتر از 1 درجه سانتیگراد باشد، پیامی به کاربر نمایش داده میشود. -
کلاس Program:
در این بخش از برنامه، یک شی از کلاس TemperatureMonitor ایجاد شده و تایمر به مدت نامحدود اجرا میشود.
با فشردن کلید Enter، تایمر متوقف میشود.
دوره های مرتبط

آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.