आम तौर पर, WPF के लिए धागे के लिए प्रवेश बिंदु विधि ThreadMethod
के लिए [STAThreadAttribute]
सेट है, या जब धागा Thread.SetApartmentState()
का उपयोग कर बनाने फ्लैट राज्य जाँच करने के लिए निर्धारित किया है। हालांकि, यह धागा शुरू होने से पहले ही सेट किया जा सकता है।
आप धागा आप से इस कार्य प्रदर्शन कर रहे हैं के आवेदन के प्रवेश बिंदु से इस विशेषता को लागू नहीं कर सकते हैं, तो निम्न प्रयास करें:
void Installer1_AfterInstall(object sender, InstallEventArgs e)
{
var thread = new Thread(new ThreadStart(DisplayFormThread));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
private void DisplayFormThread()
{
try
{
MainWindow ObjMain = new MainWindow();
ObjMain.Show();
ObjMain.Closed += (s, e) => System.Windows.Threading.Dispatcher.ExitAllFrames();
System.Windows.Threading.Dispatcher.Run();
}
catch (Exception ex)
{
Log.Write(ex);
}
}
स्रोत
2010-11-15 11:03:29
[STAThreadAttribute] निजी शून्य DisplayFormThread()) देखें {{ MainWindow ObjMain = नए MainWindow कोशिश (; ObjMain.Show(); } पकड़ (अपवाद पूर्व) { Log.Write (पूर्व); } } – anbuselvan
क्षमा करें, मुझे आपकी टिप्पणी समझ में नहीं आ रही है। 'STAThreadAttribute' को 'STATHread' तक छोटा किया जा सकता है; वह समर्थित है। क्या यही मतलब है तुम्हारा? –
यह काम नहीं करता है, [STAThread] केवल प्रोग्राम एंट्री पॉइंट (मुख्य) पर पहचाना जाता है। इसके बजाय Thread.SetApartmentState() का उपयोग करें। आपको एक संदेश लूप भी चलाने की आवश्यकता होगी, एप्लिकेशन। रुन()। –