2014-07-03 9 views
11

से आरडीसी का उपयोग करके इस मशीन को बंद और पुनः कनेक्ट करते समय WPF एप्लिकेशन को अनलोड और लोड ईवेंट को आग लग जाएगा। यह केवल Win8.1 में एक अजीब समस्या है।Win8.1 WinF या अन्य ओएस

जैसा कि हम सभी जानते हैं, यदि मशीन में कोई चल रहा एप्लिकेशन है, तो एप्लिकेशन के खिलाफ कोई अन्य व्यवहार नहीं होना चाहिए जब हम रिमोट डेस्कटॉप कनेक्शन द्वारा इस मशीन से कनेक्ट/डिस्कनेक्ट/रीकनेक्ट करते हैं। हालांकि, हमने पाया कि Win8.1 आरडीसी का उपयोग करके मशीन को बंद और पुनः कनेक्ट करते समय WPF एप्लिकेशन को अनलोड लोड और ईवेंट लोड करेगा। और यह एक अवांछित व्यवहार है जो त्रुटि का कारण बन सकता है।

  1. जो एक बटन होता है और इस बटन से अनलोड और इवेंट लोड हैंडल एक WPF आवेदन लिखें:

    यहाँ स्थिर पुन: पेश कदम हैं।

  2. उदाहरण के लिए Win7 से Win8.1 से कनेक्ट करने के लिए आरडीसी का उपयोग करना।
  3. दूरस्थ डेस्कटॉप में, इस WPF ऐप को चलाएं। (एक लोड ईवेंट a.txt में दर्ज किया जाएगा)।
  4. 'x' पर क्लिक करके आरडीसी बंद करें।
  5. इस Win8.1 से फिर से कनेक्ट करें।
  6. आप देखेंगे कि अनलोड और लोड ईवेंट निकाल दिए गए हैं।

यदि WPF ऐप Win7 या Win Server 2008 में चलता है, तो उन घटनाओं को निकाल दिया नहीं जाएगा।

तो, मुझे लगता है कि यह Win8.1 में एक अवांछित व्यवहार है। क्या यह Win8.1 आरडीपी में एक बग है? या यह एक नई सुविधा है?

+0

क्या कोई मेरी मदद कर सकता है? और यदि आवश्यक हो, तो आप https://www.hightail.com/download/ZUczbUpha0Q3N0RvS3NUQw पर अपना परीक्षण प्रोग्राम डाउनलोड कर सकते हैं। यह प्रोग्राम ईवेंट रिकॉर्ड करने के लिए एक ही पथ में a.txt फ़ाइल लिख देगा।तो, कृपया अपने एंटी-वायरस सॉफ़्टवेयर से चेतावनी छोड़ें। – capcom923

+0

मुझे पता है कि यह बहुत दूर है लेकिन मेरे पास एक ही समस्या है। क्या आपको एक समाधान मिला? – SiriusNik

+0

मुझे एक ही समस्या है, क्या कोई अपडेट है? –

उत्तर

0

ऐसा इसलिए होता है क्योंकि आरडीपी को दोबारा जोड़ने से डब्ल्यूपीएफ कोड को सूचित किया जाता है कि सत्र और स्क्रीन बदलने वाले सत्र एप्लिकेशन को बदल दिया जाता है। डब्ल्यूपीएफ को अपने डायरेक्टएक्स संसाधनों का पुनर्निर्माण करने की आवश्यकता है और शायद एक अद्यतन स्क्रीन आकार को संभालने की आवश्यकता है (भले ही संकल्प एक जैसा हो)। यह समझ में आता है कि आरडीपी क्लाइंट आरडीपी "एक्सपीरियंस" टैब से ग्राफिक्स स्तर और अन्य गुणों जैसी विभिन्न क्षमताओं को निर्दिष्ट कर सकता है। डब्ल्यूपीएफ यह निर्धारित नहीं करता है कि पैरामीटर आखिरी बार एक कनेक्शन के समान होते हैं और यह एक नया रेंडर और लेआउट चक्र ट्रिगर करता है (रंग और स्क्रीन रिज़ॉल्यूशन बदलने के बाद से समझ में आता है)। इससे नियंत्रण फिर से लोड हो जाते हैं और एक नया लोडेड इवेंट फायरिंग होता है।

आप .NET स्रोत में HwndTarget.cs की जांच करके इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं। इस सत्र को "सत्र" के लिए खोजें और आपको सत्र डिस्कनेक्ट/रीकनेक्ट के लिए बहुत सारी हैंडलिंग दिखाई देगी।

http://referencesource.microsoft.com/#PresentationCore/Core/CSharp/System/Windows/Interop/HwndTarget.cs,f20f989ef219e391

आप एक तरह से अपने लोड/उतार कोड में अतिरिक्त काम कर रही से बचने के लिए जानना चाहते हैं तो आप एक समारोह जो आप वाकई केवल एक झंडा या नल चेक के माध्यम से एक बार फोन करने के लिए ले जाने के लिए हो सकता है ।

आप देख सकते हैं कि आपके लोड किए गए ईवेंट हैंडलर पर ब्रेकपॉइंट जोड़कर क्या हो रहा है और टूल्स> विकल्प, डिबगिंग और अन-चेक "बस मेरा कोड सक्षम करें" पर जाकर, ".NET फ्रेमवर्क स्रोत स्टेपिंग सक्षम करें" की जांच करें और " स्रोत सर्वर सक्षम करें "समर्थन। जब आप आरडीपी कनेक्ट करते हैं, तो बीकेपी ट्रिगर हो जाएगा और कॉल स्टैक कॉल के अन्य स्तरों के बीच एक आकार बदलने का कार्यक्रम दिखाएगा। यह शायद डब्ल्यूपीएफ को WM_DISPLAYCHANGE प्राप्त करने के कारण था और इस कनेक्शन के साथ कम या कम संकल्प होने पर सबकुछ फिर से लेआउट हो रहा था।

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