msdn के रूप में कहता है:
private void NewWindowHandler(object sender, RoutedEventArgs e)
{
Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
}
private void ThreadStartingPoint()
{
Window1 tempWindow = new Window1();
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}
संपादित करें: यह कोई पुराना जवाब है, लेकिन जब से यह अक्सर दौरा किया जा रहा है, मैं भी निम्न संशोधन/सुधार (परीक्षण नहीं) के बारे में सोच सकता है।
आप इस तरह के एक विंडो को बंद करने के लिए, बस धागा (प्रतिनिधि) के बाहर से खिड़की ऑब्जेक्ट के संदर्भ रखने के लिए, और फिर उस पर करीब आह्वान, कुछ इस तरह करना चाहते हैं: यदि
void CloseWindowSafe(Window w)
{
if (w.Dispatcher.CheckAccess())
w.Close();
else
w.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(w.Close));
}
// ...
CloseWindowSafe(tempWindow);
नया थ्रेड समाप्त हो सकता है टिप्पणी में (जबरन रोका गया), प्रश्न के साथ लाइन में:
private void ThreadStartingPoint()
{
try{
Window1 tempWindow = new Window1();
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}
catch(ThreadAbortException)
{
tempWindow.Close();
System.Windows.Threading.Dispatcher.InvokeShutdown();
}
//the CLR will "rethrow" thread abort exception automatically
}
अस्वीकरण: सूत्र निरस्त किया जा रहा है (लगभग हमेशा) सर्वोत्तम प्रथाओं के खिलाफ घर में ऐसा नहीं करते हैं,। थ्रेड को किसी भी विभिन्न सिंक्रनाइज़ेशन तकनीकों के माध्यम से सुन्दर तरीके से संभाला जाना चाहिए, या इस मामले में, केवल window.Close()
स्रोत
2009-07-10 19:23:24
ग्रेट मैं इस तरह से –
मैं जानता हूँ कि यह एक पुराने सवाल है बनाए गए एक विंडो को बंद कर सकते हैं लेकिन यह कैसे दृष्टिकोण अभी भी काम करता है। मेरे पास सिर्फ एक समस्या है - मैं इसे विंडो लोड करने के लिए उपयोग करता हूं - नए थ्रेड में लोडिंग विंडो दिखाएं -> सामान करें -> newThread.Abort() और यह ठीक है लेकिन अगर मैं इसे फिर से करूँगा तो यह पूरे ऐप को दुर्घटनाग्रस्त कर देगा। क्योंकि यह फिर से प्रेषक को चलाने जा रहा है। इसे कैसे हल करें? – MajkeloDev
हाय, मैं भी इसके साथ संघर्ष कर रहा था। मेरे लिए, यह [लिंक] (https://dontpaniclabs.com/blog/post/2013/11/14/dynamic -स्प्लाश-स्क्रीन-इन-डब्ल्यूपीएफ /) काम किया। यह मैनुअल रीसेट इवेंट-वे का उपयोग करता है। डाउनलोड करने का एक स्रोत है और भी जांचें (गिटहब) – dba