मैंने हाल ही में उन वास्तव में बुरे साक्षात्कारों में से एक किया है, जहां वे आपके साथ अच्छे पुलिस/बुरे पुलिस खेलते हैं। जो भी मैंने जवाब दिया वह उनमें से एक के लिए पर्याप्त नहीं था और मेरा आत्मविश्वास मिनट से मिनट में घट रहा था। उनका अंतिम प्रश्न जो वास्तव में मुझे उलझन में था:साक्षात्कार प्रश्न: जब Control.InvokeRequired क्या आप Control.Invoke या Control.BeginInvoke का उपयोग करते हैं?
यदि किसी नियंत्रण को InvokeRequired की आवश्यकता होगी तो इसमें कोई अंतर होगा .वॉव याबिनइनवोक?
मैं आपको एक उदाहरण दिखा, मैं कैसे इसे समझने:
public delegate string WorkLongDelegate(int i);
var del = new WorkLongDelegate(WorkLong);
var callback = new AsyncCallback(CallBack);
del.BeginInvoke(3000, callback, del);
public string WorkLong(int i)
{
Thread.Sleep(i);
return (string.Format("Work was done within {0} seconds.", i));
}
private void CallBack(IAsyncResult ar)
{
var del = (WorkLongDelegate) ar.AsyncState;
SetText2(del.EndInvoke(ar));
}
private void SetText2(string s)
{
if(InvokeRequired)
{
// What is the difference between BeginInvoke and Invoke in below?
BeginInvoke(new MethodInvoker(() => textBox1.Text = s));
}
else
{
textBox1.Text = s;
}
}
मैं उल्लेख किया है कि BeginInvoke यह अतुल्यकालिक रूप से करना होगा, जबकि आह्वान जब तक इसकी मार डाला यूआई धागा रोकने की जाएगी। लेकिन वह काफी अच्छा नहीं था। फिर भी, अगर मैं इसके बजाय एक आमंत्रण का उपयोग करता हूं तो मैं यहां प्रदर्शन प्रभाव को समझ नहीं पा रहा हूं। कोई मुझे कृपया प्रबुद्ध कर सकता है?
इस वजह से, 'थ्रो-सुरक्षा सेटअप के आधार पर' Invoke' deadlocks के लिए कमजोर है –