دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
ایجاد و حذف View در پایگاه داده SQL
1403/12/21 -
view در پایگاه داده SQL
1403/12/20 -
پیاده سازی Synchronization در سی شارپ
1403/12/20 -
Fragmentation در پایگاه داده SQL
1403/12/19 -
Delegate در سی شارپ
1403/12/19
Thread های Foreground و 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
ویژگیهای 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 های 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 های 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 ثانیه یکبار بهطور خودکار تولید میشود و در کنسول نمایش داده میشود.
برنامه منتظر میماند تا کاربر کلیدی را فشار دهد تا اجرای آن متوقف شود.
دوره های مرتبط

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