मैं एक दृश्य सी # प्रोग्राम लिख रहा हूं जो माध्यमिक धागे पर संचालन के निरंतर लूप को निष्पादित करता है। कभी-कभी जब वह धागा एक कार्य पूरा करता है तो मैं इसे एक ईवेंटशेलर ट्रिगर करना चाहता हूं। मेरा प्रोग्राम ऐसा करता है लेकिन जब ईवेंट हैंडलर ट्रिगर होता है, तब तक द्वितीयक थ्रेड प्रतीक्षा करता है जब तक कि थ्रेड जारी रखने से पहले ईवेंट हैंडलर समाप्त हो जाता है। मैं इसे कैसे जारी रखूं? यहां जिस तरीके से मैंने वर्तमान में इसे संरचित किया है ...मैं इवेंटहालर को असीमित रूप से कैसे चला सकता हूं?
class TestClass
{
private Thread SecondaryThread;
public event EventHandler OperationFinished;
public void StartMethod()
{
...
SecondaryThread.Start(); //start the secondary thread
}
private void SecondaryThreadMethod()
{
...
OperationFinished(null, new EventArgs());
... //This is where the program waits for whatever operations take
//place when OperationFinished is triggered.
}
}
यह कोड मेरे डिवाइस में से किसी एक के लिए एक एपीआई का हिस्सा है। जब ऑपरेशनफिनिश इवेंट ट्रिगर किया जाता है, तो मैं चाहता हूं कि क्लाइंट एप्लिकेशन एपीआई ऑपरेशन को रोक दिए बिना जो कुछ भी करने की आवश्यकता हो (यानी तदनुसार जीयूआई अपडेट करें) कर सके।
इसके अलावा, अगर मैं ईवेंट हैंडलर को किसी भी पैरामीटर को पास नहीं करना चाहता हूं तो मेरा वाक्यविन्यास OperationFinished(null, new EventArgs())
का उपयोग कर सही है?
कौन सा धागा आप चाहते हैं 'OperationFinished' घटना पर उठाया जा सकता हूँ? यह आपका माध्यमिक धागा नहीं हो सकता है, क्योंकि आपको स्पष्ट रूप से इसे अवरुद्ध करने की आवश्यकता नहीं है। क्या इसे प्राथमिक धागा होना चाहिए, या फिर आप इसे एसिंक कॉलबैक के उद्देश्य के लिए बनाए गए एक अलग धागे पर उठाए जाने के साथ ठीक हैं? –