एक डब्ल्यूपीएफ एप्लीकेशन के लिए, क्या आंतरिक रूप से क्लासिक संदेश लूप (विंडोज़ GetMessage/DispatchMessage
भावना में) Application.Run
के अंदर है? क्या किसी अन्य Win32 एप्लिकेशन से PostThreadMessage के साथ एक WPF UI थ्रेड (HWND हैंडल के बिना एक संदेश) में पोस्ट किए गए संदेश को पकड़ना संभव है। धन्यवाद।डब्ल्यूपीएफ एप्लीकेशन मैसेज लूप और पोस्ट थ्रेड मैसेज
6
A
उत्तर
3
मैंने Applicaton.Run
को Dispatcher.PushFrameImpl
पर कार्यान्वित करने के लिए .NET परावर्तक का उपयोग किया। .NET Framework reference sources से एक ही जानकारी प्राप्त करना भी संभव है।
private void PushFrameImpl(DispatcherFrame frame)
{
SynchronizationContext syncContext = null;
SynchronizationContext current = null;
MSG msg = new MSG();
this._frameDepth++;
try
{
current = SynchronizationContext.Current;
syncContext = new DispatcherSynchronizationContext(this);
SynchronizationContext.SetSynchronizationContext(syncContext);
try
{
while (frame.Continue)
{
if (!this.GetMessage(ref msg, IntPtr.Zero, 0, 0))
{
break;
}
this.TranslateAndDispatchMessage(ref msg);
}
if ((this._frameDepth == 1) && this._hasShutdownStarted)
{
this.ShutdownImpl();
}
}
finally
{
SynchronizationContext.SetSynchronizationContext(current);
}
}
finally
{
this._frameDepth--;
if (this._frameDepth == 0)
{
this._exitAllFrames = false;
}
}
}
इसके अलावा, यहां TranslateAndDispatchMessage
के कार्यान्वयन, जो वास्तव में RaiseThreadMessage
अंदर निष्पादन के अपने पाठ्यक्रम के साथ ComponentDispatcher.ThreadFilterMessage ईवेंट सक्रिय है:: वहाँ वास्तव में एक क्लासिक संदेश पाश है
private void TranslateAndDispatchMessage(ref MSG msg)
{
if (!ComponentDispatcher.RaiseThreadMessage(ref msg))
{
UnsafeNativeMethods.TranslateMessage(ref msg);
UnsafeNativeMethods.DispatchMessage(ref msg);
}
}
जाहिर है, यह किसी भी पोस्ट के लिए काम करता है संदेश, सिर्फ कीबोर्ड वाले नहीं। आपको ComponentDispatcher.ThreadFilterMessage
पर सब्सक्राइब करने और रुचि के संदेश के लिए देखने में सक्षम होना चाहिए।
संबंधित मुद्दे
- 1. पोस्ट-मैसेज
- 2. पोस्ट मैसेज
- 3. बॉट पोस्ट मैसेज गायब आइकन और नाम
- 4. ब्रोकर्ड मैसेज
- 5. स्प्रिंग चैनलएवेयर मैसेज लिस्टनर
- 6. Autobahn, मैसेज ब्लॉक
- 7. मैं जेएसएफ फेस मैसेज
- 8. आईसीलिएंट मैसेज इंस्पेक्टर
- 9. प्रतिक्रिया मूल वेबव्यू पोस्ट मैसेज काम नहीं करता
- 10. मैं क्रॉस-डोमेन पोस्ट मैसेज कैसे कर सकता हूं?
- 11. विम फोल्डिंग मैसेज सिंटैक्स हाइलाइटिंग
- 12. क्रोम ऑन मैसेज श्रोता को
- 13. डब्ल्यूपीएफ एप्लीकेशन
- 14. एचटीपी क्लाइंट हेडर बनाम एचटीपीआरक्वेट मैसेज हेडर
- 15. @ Html.ValidationMessageFor() कस्टम सत्यापन मैसेज हमेशा दिखाया गया
- 16. जावाएफएक्स कार्य: अद्यतन मैसेज() कहां लिखता है?
- 17. फायरबेस क्लाउड मैसेजिंग: सेटबैकग्राउंड मैसेज हैंडलर को
- 18. स्प्रिंग के डिफॉल्ट मैसेज लिस्टनर कंटैनर
- 19. एमवीसी 3 रेजर @ एचटीएमएल। वैलिडेशन मैसेज jquery.load()
- 20. अपवाद के .TOString() और मैसेज के बीच क्या अंतर है?
- 21. "अनुवाद संदेश" और "डिस्पैच मैसेज" अलग कॉल क्यों हैं?
- 22. इनकमिंग मैसेज से यूआरएल और बॉडी प्राप्त करें?
- 23. विंडोलेस डब्ल्यूपीएफ एप्लीकेशन
- 24. एमवीवीएम डब्ल्यूपीएफ एप्लीकेशन
- 25. Azure WebJob QueueTrigger इसे प्राप्त करने के बाद हटाएं मैसेज?
- 26. क्या आपके स्वयं के पोस्ट मैसेज को ऑनमेज इवेंटहालर में पहचानने का एक मानक तरीका है?
- 27. डब्ल्यूपीएफ एप्लीकेशन त्रुटियां और नेट फ्रेमवर्क मरम्मत
- 28. पता लगाएं कि पोस्ट मैसेज ऑब्जेक्ट्स भेज सकता है या नहीं?
- 29. पोस्ट मैसेज स्क्रिप्ट आईई 8 में क्यों काम नहीं कर रही है?
- 30. पंप मैसेज() के बजाय pyhook के साथ मैं अपने लूप का उपयोग कैसे करूं?
[घटक डिस्पैटर। थ्रेडफिल्टर मैसेज] (http://msdn.microsoft.com/en-us/library/system.windows.interop.componentdispatcher.threadfiltermessage.aspx) ईवेंट के साथ एक विशिष्ट संदेश के लिए देखना संभव हो सकता है, हालांकि दस्तावेज़ कहते हैं कि यह कीबोर्ड संदेशों के लिए है। यहां एक संबंधित प्रश्न है [उत्तर] (http://stackoverflow.com/questions/476084/c-sharp-twain-interaction)। – Noseratio