हाल ही में मैं एक मालिकाना तीसरे पक्ष के पुस्तकालय में आए ब्लॉक नहीं है और वहाँ इस तरह से एक विधि व्यवहार है:कॉल को अवरुद्ध करने लेकिन धागा
public Point ClickOnDrawMat(DrawMat drwmat)
{
Point pt;
//waiting user mouse click on DrawMat and assign to pt
return pt;
}
जब मेरे कोड मुख्य थ्रेड से इस विधि बुला, यह अवरुद्ध कर देगा उपयोगकर्ता द्वारा क्लिक किए जाने तक इस विधि पर, ClickOnDrawMat
से पॉइंट रिटर्न प्राप्त करें।
public void button1_Click(object sender, EventArgs e)
{
Point userClickedPoint = ClickOnDrawMat(oDrwMat); //Wait until user clicked
//Do stuff with point we got
}
हालांकि, यह मुख्य धागे को अवरुद्ध नहीं करता है। मैं अभी भी अन्य बटन/यूआई नियंत्रण दबा सकता हूं, जबकि यह अभी भी उपयोगकर्ता क्लिक के लिए इंतजार कर रहा है।
मैंने देखा कि उपयोगकर्ता क्लिक की प्रतीक्षा करने पर, CPU कोर उपयोग में से एक बहुत अधिक (~ 75%) लगता है।
और यह कॉल स्टैक का एक उदाहरण के बाद मैं, जबकि यह अभी भी उपयोगकर्ता क्लिक के लिए इंतज़ार कर एक और बटन पर क्लिक करें है:
myProgram.frmMain.button2_Click(xxx) Line 23
[External Code]
ThirdPartyLib.ClickOnDrawMat(xxx) Line 16
myProgram.frmMain.button1_Click(xxx) Line 14
मैं सोच रहा हूँ कि यह कैसे किया जा सकता है?
अग्रिम धन्यवाद!
लाइब्रेरी क्या है? – Servy
कंप्यूटर दृष्टि के लिए मालिकाना पुस्तकालय हैल्कन। – user1755712