2011-03-18 5 views
12

में डब्ल्यूपीएफ उदाहरण बनाना क्या लिंककपैड में WPF ऑब्जेक्ट्स को तुरंत चालू करने का कोई तरीका है? यह एक भयानक मौत मर जाता हैलिंकपैड

var w = new Window(); 
w.Loaded += (o,e) => { 
    w.Content = new TextBlock() { Text = "Foo" }; 
}; 

w.Show(); 

हालांकि,: यहाँ मेरी उदाहरण (आदि सही विधानसभाओं क्वेरी में जोड़ रहे हैं,) है

System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used. 

    at System.Windows.Input.TextServicesContext.StopTransitoryExtension() 
    at System.Windows.Input.TextServicesContext.Uninitialize(Boolean appDomainShutdown) 
    at System.Windows.Input.TextServicesContext.TextServicesContextShutDownListener.OnShutDown(Object target, Object sender, EventArgs e) 
    at MS.Internal.ShutDownListener.HandleShutDown(Object sender, EventArgs e) 

कैसे मैं इस काम करने के लिए प्राप्त कर सकते हैं पर कोई सुराग?

+9

अपडेट: इस हाल LINQPad बीटा में तय हो गई है - आप WPF विंडो प्रदर्शित कर सकते हैं किसी भी तरह से आप चाहते हैं और कोई भयानक मौत नहीं है :) आप निम्न कार्य भी कर सकते हैं, जो आउटपुट पैनल में एक WPF तत्व प्रदर्शित करता है: PanelManager.DisplayWpfElement (नया टेक्स्टब्लॉक() {टेक्स्ट = "फू"}); –

उत्तर

6

आपको new Application().Run(w) पर कॉल करके एक संदेश लूप चलाने की आवश्यकता है।

+0

यह पूरी तरह से काम किया! पारितोषिक के लिए धन्यवाद। –

10

यह इस प्रकार है करने के लिए एक और तरीका है:

w.ShowDialog(); 
Dispatcher.CurrentDispatcher.InvokeShutdown(); // Cleanly end WPF session. 

अधिक उदाहरण:

new Window { Content = "Foo" }.ShowDialog(); 
new Window { Content = new Button { FontSize = 50, Content = "Foo" } }.ShowDialog(); 

Dispatcher.CurrentDispatcher.InvokeShutdown(); // Cleanly end WPF session. 
संबंधित मुद्दे