मुझे लगता है कि मुझे डिस्पैचर कतार समझने में कुछ मदद चाहिए।डिस्पैचर कतार को समझना
जब नया काम आता है तो यह प्रेषक कतार की शुरुआत में जोड़ा जाता है और जब डिस्पैचर एक कार्यरत आइटम को संसाधित करना चाहता है तो इसे शुरुआत से हटा दिया जाता है।
अधिक सामान्य शब्दों में: यदि कोई काम है तो यह कतार के अंदर एक फीफो तरीके से संग्रहीत हो जाता है और तब तक संसाधित नहीं किया जाता है जब तक कोई काम बाकी नहीं होता है।
MSDN प्रलेखीकरण here एक loop
और एक frame
की चर्चा करते हुए किया जाता है:
The Dispatcher processes the work item queue in a loop. The loop is referred to as a frame.
लेकिन जहां इस संदर्भ में एक पाश है? मेरे लिए एक लूप कुछ ऐसा होता है जो किसी चीज़ पर पुनरावृत्त होता है और जब यह अंत तक पहुंच जाता है तो यह फिर से शुरू होता है।
और frame
की अवधारणा क्या है? एमएसडीएन दस्तावेज के अनुसार एक फ्रेम कतार के अंदर काम करने वाली वस्तुओं का एक पंच है? यदि यह सच है तो स्थिर विधि Disptatcher.PushFrame()
का उपयोग कैसे किया जाना चाहिए?
और सबसे दिलचस्प सवाल यह है कि कतार की वर्तमान स्थिति प्राप्त करने का कोई तरीका है या नहीं, विशेष रूप से कतार में कितनी वस्तुएं हैं।
क्या यह तब होता है जब कोई विधि जिसे पहले (और डिस्पैचर कतार में डालने के लिए) कहा जाता है, उसे निष्पादित किया जाता है कि उसे तुरंत कतार से निकाल दिया जाता है या यह दूसरी अवधि के लिए अंदर रहता है?
मुझे पता है, :-)
पहला प्रश्न: क्यों? आप डिस्पैचर के साथ कुछ भी क्यों चाहते हैं? आम तौर पर, एक डब्ल्यूपीएफ प्रक्रिया के लिए डिस्पैचर बस "संदेश पंप" होता है। यह सभी संदेशों/घटनाओं/आदेशों को WPF UI के माध्यम से एप्लिकेशन कोड (जैसे माउस मूवमेंट, क्लिक इत्यादि) के माध्यम से संभालता है। जब अनुप्रयोग रन विधि लागू होती है, तो वह उस लूप को शुरू करने के लिए पुशफ्रेम को कॉल करता है। आप एक ही धागे के लिए एक और शुरू नहीं कर सकते हैं; और डिस्पैचर यूआई काम को संसाधित करने के लिए है। –
क्या आपने [थ्रेडिंग मॉडल] (http://msdn.microsoft.com/en-us/library/ms741870.aspx) के बारे में पढ़ा था? –
यह निर्माता-उपभोक्ता समस्या का एक मानक समाधान है: http://en.wikipedia.org/wiki/Producer-consumer_problem –