2011-01-31 18 views
9

मेरे पास एक ईवेंट हैंडलर विधि है जिसे सीधे मानक विधि कहा जाता है। यही है, यह केवल तब नहीं कहा जाता है जब मेरी घटना होती है लेकिन एक निजी विधि के रूप में भी।मैन्युअल रूप से एक ईवेंट हैंडलर को कॉल करना

UtilStk.StkRoot.OnStkObjectAdded += new 
    IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects); 

private void TallyScenarioObjects(object sender) 
{ 
    ... 
} 

क्या यह हैंडलर को सीधे कॉल करते समय एक शून्य तर्क पारित करने के लिए उपयुक्त है?

TallyScenarioObjects(null); 
+0

जब तक आपके ईवेंट हैंडलर शून्य मान संभालती –

+1

भी http://stackoverflow.com/questions/4684513/how-to-trigger-a-timer-tick-programatically/4684566#4684566 देखें - सीधे कॉलिंग इवेंट हैंडलर इस तरह की कोड गंध है। – Bevan

उत्तर

17

बस एक और विधि है कि आपके ईवेंट हैंडलर से कहा जा सकता है में आम तर्क संपुटित:

UtilStk.StkRoot.OnStkObjectAdded += new IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects); 

private void TallyScenarioObjects(object sender) 
{ 
    DoStuff(); 
} 

private void DoStuff() { ... } 

private void AnotherMethod() 
{ 
    DoStuff(); 
} 

कहा कि, अपने हैंडलर , एक विधि है इसके बारे में कुछ खास नहीं है, तो आप हमेशा तर्कों को डमी कर सकते हैं और इसे सीधे कॉल कर सकते हैं। हालांकि मैं उस मार्ग पर नहीं जाऊंगा।

6

हाँ कि काम करेगा, लेकिन यह एक 2 विधि है कि प्रत्यक्ष या ईवेंट हैंडलर से कहा जा सकता है के लिए बेहतर अभ्यास होगा:

UtilStk.StkRoot.OnStkObjectAdded += new IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects); 

private void TallyScenarioObjects(object sender) 
{ 
    DoTally(....); 
} 

private void DoTally(....) 
{ 
} 

और कुछ नहीं आप अन्य डेवलपर कौन जीता भ्रमित नहीं होगा इस तरह से बुलाए जाने वाले इवेंट हैंडलर को देखने की उम्मीद नहीं होगी।

1

मैं बाकी के साथ सहमत हूं। अपने कार्यक्रम को एक विधि कॉल करें। फिर आप उस विधि को जहां भी चाहें वहां से बुला सकते हैं।

UtilStk.StkRoot.OnStkObjectAdded += new IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects); 

private void TallyScenarioObjects(object sender) 
{ 
    MyMethod(); 
} 

private void MyMethod() 
{ 
    //Code here. 
} 
संबंधित मुद्दे

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