2008-10-19 10 views
5

मैं डब्ल्यूपीएफ के लिए नौसिखिया हूं और डब्ल्यूपीएफ और विंडोज फॉर्म एकीकरण के बारे में कुछ प्रश्न हैं।विंडोज़ फॉर्म के साथ डब्ल्यूपीएफ - STAThread

मेरे पास एक मौजूदा दृश्य सी # विंडोज फॉर्म एप्लिकेशन है। मैं इसे एक WPF विंडो के साथ एकीकृत करना चाहता हूं, जिसे बटन क्लिक पर दिखाया जा सकता है। यह संभव नहीं था क्योंकि डब्ल्यूपीएफ कॉलिंग थ्रेड को STATHread होने की अपेक्षा करता है और डिफ़ॉल्ट रूप से WinForm मानता है कि थ्रेड एक एमटीएथ्रेड है। मैंने WPF UI को कॉल करने के लिए STAThread के एक अपार्टमेंट स्टेटस के साथ एक नया धागा बनाने की कोशिश की लेकिन यह काम नहीं किया। मैंने Dispatcher.BeginInvoke विधि और पृष्ठभूमि कार्यकर्ता का भी उपयोग करने का प्रयास किया, लेकिन उनमें से कोई भी इस मुद्दे को हल नहीं किया।

1) क्या हम मुख्य रूप से STATHread के रूप में चिह्नित किए बिना WPF विंडो/नियंत्रण पर कॉल कर सकते हैं? यदि यह संभव है, तो क्या कोई मुझे उचित दिशा में इंगित कर सकता है? 2) यदि इसे पूरा करने का एकमात्र तरीका मुख्य थ्रेड को STAThread बनाकर है, तो एप्लिकेशन के सामान्य प्रदर्शन/प्रतिक्रिया पर कोई असर पड़ेगा।

अग्रिम धन्यवाद।

उत्तर

8

मुझे लगता है कि सबसे आसान समाधान आपके WinForms थ्रेड को एसटीए में निष्पादित करना है। एसटीए थ्रेड Winforms ऐप होने में कुछ भी गलत नहीं है (यह वास्तव में अक्सर डिफ़ॉल्ट है)।

आप अपने कार्यक्रम का मुख्य विधि के लिए निम्न पंक्ति जोड़कर इसे ठीक कर सकते हैं:

[STAThreadAttribute] 
static void Main(string[] args) 
+1

वास्तव में एसटीए OLE खींचें ड्रॉप और कुछ COM घटक काम करने के लिए इंटरफ़ेस के लिए आवश्यक है .. – Gishu

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