C# में थ्रेड को पैरामीटर पास करने के लिए ParameterizedThreadStart डेलीगेट का उपयोग किया जाता है, जो object पैरामीटर स्वीकार करता है।
चरण
using System.Threading;नेमस्पेस शामिल करें।objectपैरामीटर स्वीकार करने वाला मेथड बनाएं।ParameterizedThreadStartडेलीगेट के साथ थ्रेड बनाएं।Start(object)मेथड कॉल करके पैरामीटर पास करें।
उदाहरण
using System;
using System.Threading;
namespace Sample {
class Demo {
static void Main(string[] args) {
String str = "Hello World!";
// नया थ्रेड बनाएं
Thread thread = new Thread(threadDemo);
// पैरामीटर पास करें
thread.Start(str);
}
static void threadDemo(object str) {
Console.WriteLine("Value passed to the thread: " + str);
}
}
}
आउटपुट
Value passed to the thread: Hello World!
एकाधिक पैरामीटर्स पास करना
चूंकि Start केवल एक object स्वीकार करता है, एकाधिक मानों के लिए:
तरीका 1: Tuple का उपयोग
thread.Start(Tuple.Create("Hello", 123, true));
static void threadDemo(object param) {
var data = (Tuple)param;
Console.WriteLine($"{data.Item1}, {data.Item2}, {data.Item3}");
}
तरीका 2: कस्टम क्लास/स्ट्रक्ट
class ThreadData {
public string Message { get; set; }
public int Count { get; set; }
}
thread.Start(new ThreadData { Message = "Hello", Count = 5 });
तरीका 3: Lambda एक्सप्रेशन (आधुनिक, अनुशंसित)
string msg = "Hello";
int count = 5;
Thread thread = new Thread(() => {
Console.WriteLine($"{msg} - {count}");
});
thread.Start();
मुख्य बिंदु
- पैरामीटर
objectके रूप में पास होता है, कास्टिंग आवश्यक है। - लैम्ब्डा एक्सप्रेशन्स क्लोजर के माध्यम से वेरिएबल्स कैप्चर कर सकते हैं (अधिक टाइप-सेफ)।
- साझा डेटा एक्सेस के लिए थ्रेड सेफ्टी (लॉक, Concurrent कलेक्शन्स) पर विचार करें।