Thread های Foreground و Background در سی شارپ

تیم تحریریه 1403/12/21 0 17
لینک کوتاه https://zoheirsoftware.com/z/e8dec6b73 |
Thread های Foreground و Background در سی شارپ,ویژگی‌های Thread های Foreground,ویژگی‌های Thread های Background

Thread های Foreground و Background در سی شارپ

در سی شارپ، Thread‌ها به دو نوع Foreground (پیش‌زمینه) و Background (پس‌زمینه) تقسیم می‌شوند.

Threadهای Foreground تا زمانی که اجرای آن‌ها به پایان نرسد، باعث می‌شوند که برنامه متوقف نشود، حتی اگر Thread اصلی خاتمه یابد.

در مقابل، Threadهای Background به محض پایان یافتن Thread اصلی، متوقف می‌شوند، حتی اگر هنوز در حال اجرا باشند.

این ویژگی برای انجام وظایف غیربلوک‌کننده مانند ثبت گزارش‌ها یا پردازش‌های کم‌اهمیت در پس‌زمینه کاربرد دارد.

برای تعیین نوع Thread، از ویژگی IsBackground استفاده می‌شود. در مثال زیر، یک Thread Foreground و یک Thread Background ایجاد شده‌اند:

using System;
using System.Threading;

class Program  
{  
    static void Run()  
    {  
        for (int i = 0; i < 5; i++)  
        {  
            Console.WriteLine($"Thread در حال اجرا: {i}");  
            Thread.Sleep(1000);  
        }  
    }  

    static void Main()  
    {  
        Thread t1 = new Thread(Run);  
        t1.IsBackground = true; // تعیین به عنوان Background  
        t1.Start();  

        Console.WriteLine("Thread اصلی خاتمه یافت.");  
    }  
}


در این مثال، چون Thread t1 یک Background Thread است، بلافاصله پس از اتمام Thread اصلی متوقف می‌شود، حتی اگر حلقه آن کامل نشده باشد.

 

 

Thread های Foreground و Background در سی شارپ

ویژگی‌های Thread های Foreground

ویژگی‌های Thread های Foreground در سی‌شارپ عبارتند از:

  • حفظ برنامه

    تا زمانی که تمام Foreground Threads تمام نشده باشند، برنامه ادامه می‌یابد.
  • اهمیت بیشتر

    این Threads برای کارهایی که باید به طور کامل اجرا شوند، مثل پردازش‌های اصلی، استفاده می‌شوند.
  • تمام شدن برنامه با پایان Thread اصلی

    اگر Thread اصلی (Main Thread) تمام شود، تا زمانی که همه Foreground Threads کامل نشوند، برنامه بسته نمی‌شود.
  • تنظیم از طریق IsBackground

    با استفاده از ویژگی IsBackground می‌توان مشخص کرد که یک Thread Foreground باشد.

مثال:

در اینجا یک مثال ساده از یک Thread Foreground را مشاهده می‌کنید:

using System;

using System.Threading;




class Program

{

    static void Main()

    {

        // ایجاد Thread

        Thread foregroundThread = new Thread(MyForegroundTask);

        foregroundThread.IsBackground = false; // تعیین نوع Foreground

        foregroundThread.Start();




        // سایر کدهای اصلی برنامه

        Console.WriteLine("Main thread is running...");

    }

    static void MyForegroundTask()

    {

        Thread.Sleep(3000); // انجام کار برای 3 ثانیه

        Console.WriteLine("Foreground thread finished its task.");

    }

}

در این مثال، MyForegroundTask یک Thread Foreground است که 3 ثانیه صبر کرده و سپس پیامی را چاپ می‌کند.

برنامه اصلی پس از شروع Thread Foreground، منتظر اتمام آن می‌ماند.

 

 

ویژگی‌های Thread های Foreground

 

 

ویژگی‌های Thread های Background

ویژگی‌های Thread های Background در سی‌شارپ عبارتند از:

  • خاتمه خودکار

    وقتی تمام Foreground Threads پایان می‌یابند، Thread های Background به طور خودکار متوقف می‌شوند.
  • اجرای غیرضروری

    این Threads معمولاً برای کارهای جانبی یا پردازش‌های پس‌زمینه استفاده می‌شوند که نیاز به تکمیل ندارند.
  • تنظیم توسط IsBackground

    می‌توان با ویژگی IsBackground یک Thread را به Background تبدیل کرد.
  • عدم تاثیر بر پایان برنامه

    حتی اگر Thread های Background در حال اجرا باشند، پایان یافتن Foreground Threads باعث خاتمه برنامه می‌شود.

مثال:

در اینجا یک مثال از یک Thread Background را مشاهده می‌کنید:

using System;

using System.Threading;

class Program

{

    static void Main()

    {

        // ایجاد Thread

        Thread backgroundThread = new Thread(MyBackgroundTask);

        backgroundThread.IsBackground = true; // تعیین نوع Background

        backgroundThread.Start();


        // سایر کدهای اصلی برنامه

        Console.WriteLine("Main thread is running...");

        Thread.Sleep(1000); // برای یک ثانیه صبر می‌کنیم

        Console.WriteLine("Main thread finished.");

    }


    static void MyBackgroundTask()

    {

        Thread.Sleep(3000); // انجام کار برای 3 ثانیه

        Console.WriteLine("Background thread finished its task.");

    }

}

در این مثال، MyBackgroundTask یک Thread Background است.

این Thread پس از یک ثانیه که برنامه اصلی به پایان می‌رسد، همچنان در حال اجرای خود است، اما چون یک Thread Background است، بلافاصله پس از پایان برنامه خاتمه می‌یابد.

 

ویژگی‌های Thread های Background

کاربردهای عملی Thread های Foreground و Background

  • Thread های Foreground

    این Thread ها معمولاً برای انجام کارهایی که باید در هر وضعیت ادامه یابند و نمی‌توان آنها را نادیده گرفت، استفاده می‌شوند.
    به عنوان مثال، در بازی‌ها، پردازش‌های اصلی و پیچیده‌ای مانند فیزیک بازی یا رندر گرافیک باید در Thread های Foreground اجرا شوند تا بازی همچنان در حال اجرا باشد.
  • Thread های Background

    این نوع Thread ها برای کارهای کم‌اهمیت که نیازی به تکمیل کامل در طول عمر برنامه ندارند، مناسب هستند.
    به عنوان مثال، نظارت بر وقایع سیستم یا ارسال گزارش‌های دوره‌ای می‌تواند توسط Thread های Background انجام شود.

 

 

 

آیا به دنبال یک فرصت عالی برای یادگیری برنامه‌نویسی هستید؟ 🚀

با دوره آموزشی سی‌شارپ ما، شما می‌توانید مهارت‌های خود را به سطح جدیدی ارتقا دهید! این دوره به‌طور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامه‌نویسی سی‌شارپ پیش بروید.

👨‍🏫 چرا دوره ما را انتخاب کنید؟

  • محتوای جامع و عملی: با پروژه‌های واقعی و تمرینات عملی، یادگیری را به تجربه‌ای جذاب تبدیل کنید.
  • مدرس مجرب: از تجربه و دانش مدرس حرفه‌ای بهره‌مند شوید که شما را در هر مرحله از یادگیری راهنمایی می‌کنند.
  • پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
  • دسترسی مادام‌العمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، می‌توانید به آن مراجعه کنید.

💡 فرصت را از دست ندهید!

بایادگیری سی‌شارپ، می‌توانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژه‌های جذاب و چالش‌برانگیز شرکت کنید.

همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده‌ای روشن‌تر بردارید!

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

 

 

مثال پروژه محور از Threadهای Foreground و Background

در این پروژه، سیستم نظارت بر وضعیت سرور به‌طور مداوم وضعیت سرور را چک کرده و نتایج را چاپ می‌کند.

همچنین، در پس‌زمینه، یک عملیات گزارش‌گیری از وضعیت سرور به‌طور دوره‌ای انجام می‌شود.

Thread های Foreground برای بررسی وضعیت سرور استفاده شده‌اند تا همیشه در حال اجرا بمانند، در حالی که Thread های Background برای ارسال گزارش‌ها در پس‌زمینه به‌طور غیرضروری استفاده شده‌اند.

کد پروژه:

using System;

using System.Threading;

class ServerMonitor

{

    // متغیر برای شبیه‌سازی وضعیت سرور

    private static bool serverStatus = true;


    static void Main()

    {

        // ایجاد Thread برای نظارت بر وضعیت سرور (Foreground)

        Thread statusCheckThread = new Thread(CheckServerStatus);

        statusCheckThread.IsBackground = false; // Foreground thread

        statusCheckThread.Start();


        // ایجاد Thread برای ارسال گزارش در پس‌زمینه (Background)

        Thread reportThread = new Thread(GenerateReports);

        reportThread.IsBackground = true; // Background thread

        reportThread.Start();


        // برنامه اصلی منتظر می‌ماند تا وضعیت سرور چک شود

        Console.WriteLine("Monitoring server status. Press any key to stop...");

        Console.ReadKey();

    }

    // متد برای شبیه‌سازی چک کردن وضعیت سرور

    static void CheckServerStatus()

    {

        while (true)

        {

            // شبیه‌سازی تغییر وضعیت سرور

            serverStatus = !serverStatus;

            Console.WriteLine($"Server is {(serverStatus ? "Online" : "Offline")}.");


            // صبر کردن برای 2 ثانیه

            Thread.Sleep(2000);

        }

    }


    // متد برای شبیه‌سازی ارسال گزارش‌های دوره‌ای

    static void GenerateReports()

    {

        while (true)

        {

            Console.WriteLine("Generating server status report...");


            // صبر کردن برای 5 ثانیه قبل از تولید گزارش بعدی

            Thread.Sleep(5000);

        }

    }

}

توضیحات کد

  • Thread نظارت بر وضعیت سرور:
    این Thread وظیفه دارد تا وضعیت سرور را بررسی کرده و هر 2 ثانیه یک‌بار آن را تغییر دهد و وضعیت آنلاین یا آفلاین را در کنسول نمایش دهد. این Thread به صورت Foreground است، بنابراین برنامه منتظر می‌ماند تا این Thread به اتمام برسد.
  • Thread ارسال گزارش‌ها:
    این Thread به‌طور دوره‌ای هر 5 ثانیه یک‌بار گزارشی از وضعیت سرور تولید می‌کند. این Thread به صورت Background است، بنابراین حتی اگر برنامه خاتمه یابد، این Thread به‌طور خودکار قطع می‌شود.
  • نحوه عملکرد:
    پس از شروع برنامه، وضعیت سرور هر 2 ثانیه تغییر می‌کند و در کنسول نمایش داده می‌شود.
    گزارش‌های وضعیت سرور هر 5 ثانیه یک‌بار به‌طور خودکار تولید می‌شود و در کنسول نمایش داده می‌شود.
    برنامه منتظر می‌ماند تا کاربر کلیدی را فشار دهد تا اجرای آن متوقف شود.

 

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

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

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

999,000 تومان

2.4k بازدید

ارسال دیدگاه

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