کلاس Timer در سی شارپ

تیم تحریریه 1403/12/17 0 73
لینک کوتاه https://zoheirsoftware.com/z/e027d947e |
کلاس Timer در سی شارپ,ویژگی‌های کلاس Timer,نحوه ایجاد و استفاده از کلاس Timer

کلاس Timer در سی شارپ

کلاس Timer در سی‌شارپ برای اجرای یک عملیات به صورت دوره‌ای یا با تأخیر مشخص استفاده می‌شود.

این کلاس در فضای نام System.Timers قرار دارد و به برنامه‌نویسان اجازه می‌دهد تا وظایفی را در فواصل زمانی مشخص اجرا کنند.

Timer می‌تواند در پس‌زمینه اجرا شود و نیازی به مداخله مستقیم کاربر ندارد.

برای تنظیم زمان‌بندی اجرا، از خاصیت Interval استفاده می‌شود و با متد ()Start و ()Stop می‌توان تایمر را کنترل کرد.

برای استفاده از Timer، ابتدا یک نمونه از آن ایجاد کرده و یک رویداد Elapsed برای اجرای کد موردنظر تعریف می‌کنیم.

این رویداد پس از هر بار اتمام زمان تعیین‌شده، اجرا می‌شود.

به عنوان مثال، در یک برنامه می‌توان از Timer برای بروزرسانی رابط کاربری یا ارسال درخواست‌های خودکار به سرور استفاده کرد.

در نظر داشته باشید که اگر از Windows Forms استفاده می‌کنید، می‌توان از System.Windows.Forms.Timer که مناسب اجرای درون UI Thread است، بهره برد.

 

کلاس Timer در سی شارپ

 

 

ویژگی‌های کلاس Timer

این کلاس از نوع System.Object ارث‌بری کرده و قابلیت استفاده از تایمرهای قابل تنظیم را به شما می‌دهد.

مهم‌ترین ویژگی‌های کلاس Timer عبارتند از:

  • Interval

    این ویژگی زمان بین اجرای متدها را مشخص می‌کند. یعنی زمان بین هر بار فراخوانی متد مشخص شده است.
  • Callback

    این ویژگی به شما این امکان را می‌دهد تا متدی که قرار است در هر بار فراخوانی انجام شود را مشخص کنید.
  • Enabled

    این ویژگی نشان می‌دهد که آیا تایمر فعال است یا خیر.
  • ()Dispose

    این متد برای آزادسازی منابع استفاده‌شده توسط تایمر به کار می‌رود.

 

 

ویژگی‌های کلاس Timer

نحوه ایجاد و استفاده از کلاس 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

مثال پروژه محور از کلاس 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، تایمر متوقف می‌شود.

 

دوره های مرتبط
آموزش برنامه نویسی سی شارپ,آموزش پروژه محور سی شارپ,آموزش مقدماتی تا پیشرفته سی شارپ,طراحی نرم افزار تحت ویندوز

آموزش برنامه نویسی سی شارپ

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

999,000 تومان

2.5k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.