C# में Thread क्लास: मेथड्स और प्रॉपर्टीज
System.Threading.Thread क्लास मैनेज्ड थ्रेड्स को नियंत्रित करती है। थ्रेड्स हल्के वजन के एक्सीक्यूशन पाथ्स हैं।
मुख्य प्रॉपर्टीज
| प्रॉपर्टी | विवरण |
|---|---|
CurrentThread | वर्तमान में चल रहे थ्रेड को प्राप्त करता है (स्टैटिक)। |
CurrentContext | वर्तमान कॉन्टेक्स्ट प्राप्त करता है जहां थ्रेड चल रहा है। |
CurrentCulture | वर्तमान थ्रेड की कल्चर (फॉर्मेटिंग, तुलना) सेट/गेट करता है। |
CurrentUICulture | रिसोर्स मैनेजर के लिए UI कल्चर सेट/गेट करता है। |
CurrentPrincipal | रोल-बेस्ड सिक्योरिटी के लिए वर्तमान प्रिंसिपल सेट/गेट करता है। |
ExecutionContext | थ्रेड के विभिन्न कॉन्टेक्स्ट्स की जानकारी रखता है। |
IsAlive | थ्रेड निष्पादित हो रहा है? (बूलियन) |
IsBackground | बैकग्राउंड थ्रेड है? (ऐप एग्जिट को ब्लॉक नहीं करता) |
ManagedThreadId | थ्रेड का यूनिक आइडेंटिफायर (इंट)। |
Name | थ्रेड का नाम (डीबगिंग के लिए)। |
Priority | थ्रेड प्रायोरिटी (Lowest..Highest)। |
ThreadState | थ्रेड की वर्तमान स्थिति (Running, WaitSleepJoin, Stopped, आदि)। |
मुख्य मेथड्स
| मेथड | विवरण |
|---|---|
Start() | थ्रेड शुरू करता है (कंस्ट्रक्टर में दिए डेलीगेट को चलाता है)। |
Sleep(ms) | वर्तमान थ्रेड को निर्दिष्ट मिलीसेकंड्स के लिए सस्पेंड करता है (स्टैटिक)। |
Join() | कॉलिंग थ्रेड को ब्लॉक करता है जब तक यह थ्रेड समाप्त न हो जाए। |
Abort() | अप्रचलित: ThreadAbortException थ्रो करके थ्रेड समाप्त करता है। उपयोग न करें। |
Interrupt() | WaitSleepJoin स्थिति में थ्रेड को इंटरप्ट करता है (ThreadInterruptedException)। |
Yield() | दूसरे थ्रेड को चलने का मौका देता है (स्टैटिक)। |
GetData/SetData | थ्रेड-लोकल डेटा स्लॉट्स (LocalDataStoreSlot)। |
BeginCriticalRegion/EndCriticalRegion | होस्ट को सूचित करता है कि क्रिटिकल कोड क्षेत्र में प्रवेश/निकास हो रहा है। |
BeginThreadAffinity/EndThreadAffinity | होस्ट को सूचित करता है कि कोड फिजिकल थ्रेड पहचान पर निर्भर करता है। |
AllocateDataSlot() | सभी थ्रेड्स पर अनाम डेटा स्लॉट आवंटित करता है (स्टैटिक)। |
AllocateNamedDataSlot(name) | नामित डेटा स्लॉट आवंटित करता है (स्टैटिक)। |
उदाहरण: थ्रेड प्रॉपर्टीज और मेथड्स
using System;
using System.Threading;
class Program {
static void Main() {
Thread t = Thread.CurrentThread;
t.Name = "MainThread";
Console.WriteLine($"Thread ID: {t.ManagedThreadId}");
Console.WriteLine($"Name: {t.Name}");
Console.WriteLine($"Priority: {t.Priority}");
Console.WriteLine($"IsBackground: {t.IsBackground}");
Console.WriteLine($"IsAlive: {t.IsAlive}");
Console.WriteLine($"Culture: {t.CurrentCulture.Name}");
// नया थ्रेड बनाएं
Thread worker = new Thread(Work);
worker.Name = "Worker";
worker.IsBackground = true; // ऐप एग्जिट को ब्लॉक नहीं करेगा
worker.Start();
worker.Join(); // वेट करें
Console.WriteLine("Worker finished");
}
static void Work() {
Console.WriteLine($"Working on {Thread.CurrentThread.Name}");
Thread.Sleep(1000);
}
}
आउटपुट
Thread ID: 1 Name: MainThread Priority: Normal IsBackground: False IsAlive: True Culture: en-US Working on Worker Worker finished
आधुनिक विकल्प
नए कोड के लिए Task, async/await, Parallel, ThreadPool प्रीफर करें। Thread लो-लेवल कंट्रोल के लिए है।