2009-02-09 6 views
10

InvokeRequired और somecontrol.InvokeRequired के बीच क्या अंतर है?InvokeRequired बनाम नियंत्रण का उपयोग करना। InvokeRequired

इस तरह,

delegate void valueDelegate(string value); 

private void SetValue(string value) 
{ 
    if (InvokeRequired) 
    { 
     BeginInvoke(new valueDelegate(SetValue),value); 
    } 
    else 
    { 
     someControl.Text = value; 
    } 
} 

और

delegate void valueDelegate(string value); 

private void SetValue(string value) 
{ 
    if (someControl.InvokeRequired) 
    { 
     someControl.Invoke(new valueDelegate(SetValue),value); 
    } 
    else 
    { 
     someControl.Text = value; 
    } 
} 

उत्तर

20

पहले संस्करण धागा इस नियंत्रण के लिए जिम्मेदार जाँच करता है। दूसरा संस्करण someControl के लिए जिम्मेदार थ्रेड की जांच करता है। (और जिसके लिए नियंत्रण के धागे के लिए वे आमंत्रण का प्रतिनिधि हैं।)

वे संभावित रूप से भिन्न हो सकते हैं - हालांकि वे वास्तव में नहीं होना चाहिए यदि दोनों नियंत्रण एक ही शीर्ष-स्तरीय विंडो में हों। (एक खिड़की में सभी नियंत्रण एक ही धागे पर चलने चाहिए।)

3

अंतर यह है कि आप संपत्ति का उपयोग कर रहे हैं। यदि आप फ़ॉर्म पर किसी विधि के भीतर से InvokeRequired तक पहुंचते हैं, तो आप फ़ॉर्म की InvokeRequired प्रॉपर्टी को प्रभावी ढंग से एक्सेस कर सकते हैं।

यदि फ़ॉर्म और कुछ नियंत्रण उसी धागे में बनाए जाते हैं, तो वे वही मान वापस कर देंगे।

2

ऐसा लगता है कि आप पहले उदाहरण में नियंत्रण के दायरे में हैं, जबकि दूसरे में आप नहीं हैं। मुख्य रूप किसी अन्य की तरह नियंत्रण है। अगर कुछ नियंत्रण मुख्य नियंत्रण के नियंत्रण संग्रह में जोड़ा जाता है, तो आप या तो उपयोग कर सकते हैं।

संबंधित मुद्दे