2012-02-08 16 views
8

मैं सॉकेट प्रोग्रामिंग सीख रहा हूँ और मैं निम्नलिखित कार्य हो:AsyncCallback फ़ंक्शन को तर्क दें?

public void OnDataReceived(IAsyncResult asyn) 

और यह कैसे कॉलबैक सेट हो जाता है:

pfnWorkerCallBack = new AsyncCallback(OnDataReceived); 

समस्या मैं OnDataReceived कॉलबैक करने के लिए एक और तर्क पारित करने के लिए की जरूरत है समारोह, मैं यह कैसे कर सकता हूं? मैं एक साधारण टीसीपी सर्वर बनाने की कोशिश कर रहा हूं और मुझे ट्रैक करने की आवश्यकता है कि किस क्लाइंट से डेटा आ रहा है। कोई सुझाव? धन्यवाद!

+0

[असिंक्रोनस प्रतिनिधि प्रोग्रामिंग नमूना] (http://msdn.microsoft.com/en-us/library/h80ttd5f.aspx) – sll

उत्तर

7

मुझे लगता है कि आप यहां System.Net.Sockets.Socket का उपयोग कर रहे हैं। यदि आप BeginReceive के ओवरलोड को देखते हैं तो आपको object पैरामीटर (नामित राज्य) दिखाई देगा। आप इस पैरामीटर के रूप में मनमाने ढंग से मूल्य पारित कर सकते हैं और यह आपके AsyncCallback कॉल पर वापस आ जाएगा। इसके बाद आप AsyncStateIAsyncResult ऑब्जेक्ट का उपयोग करके अपनी कॉलबैक में पारित कर सकते हैं। उदाहरण के लिए,

public void SomeMethod() { 
    int myImportantVariable = 5; 
    System.Net.Sockets.Socket s; 
    s.BeginReceive(buffer, offset, size, SocketFlags.None, new new AsyncCallback(OnDataReceived), myImportantVariable); 
} 

private void OnDataReceived(IAsyncResult result) { 
    Console.WriteLine("My Important Variable was: {0}", result.AsyncState); // Prints 5 
} 
+0

धन्यवाद, मेरी समस्या हल हो गई !! – user1192403

+0

@ user1192403 इसे सुनकर खुशी हुई :) – MrMDavidson

+0

क्या होगा यदि हम एकाधिक पैरामीटर पारित करने जा रहे हैं? –

2

जब आप BeginReceive कहते हैं, आप अपने पिछले पैरामीटर के रूप में किसी भी object पारित कर सकते हैं। एक ही ऑब्जेक्ट IAsyncResult की AsyncState संपत्ति के माध्यम से आपके कॉलबैक में उपलब्ध कराया जाएगा।

var someDataIdLikeToKeep = new object(); 
mySocket.BeginBlaBla(some, other, ar => { 
     mySocket.EndBlaBla(ar); 
     CallSomeFunc(someDataIdLikeToKeep); 
    }, null) //no longer passing state as we captured what we need in callback closure 

यह प्राप्त समारोह में एक राज्य वस्तु कास्ट करने के लिए होने सहेजता है:

3

यह एक समस्या मैं गुमनाम प्रतिनिधियों के साथ हल करने के लिए पसंद करते हैं है।

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