Normalerweise hat die Einstiegspunktmethode für Threads für WPF [STAThreadAttribute]
für ThreadMethod
festgelegt, oder der Appliance-Status muss auf STA festgelegt werden, wenn der Thread unter Thread.SetApartmentState()
erstellt wird. Dies kann jedoch nur eingestellt werden, bevor der Thread gestartet wird.
Wenn Sie nicht dieses Attribut auf den Eintrittspunkt der Anwendung des Threads gelten Sie diese Aufgabe aus ausführen, versuchen Sie Folgendes:
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);
}
}
[STAThreadAttribute] private void DisplayFormThread anzeigen() { versuchen { Mainwindow ObjMain = new Mainwindow(); ObjMain.Show(); } catch (Ausnahme ex) { Log.Write (ex); } } – anbuselvan
Entschuldigung, ich verstehe Ihren Kommentar nicht. 'STAThreadAttribute' kann auf' STAThread' verkürzt werden; das wird unterstützt. Meinst Du das? –
Dies funktioniert nicht, [STAThread] wird nur am Programmeintrittspunkt (Main) erkannt. Verwenden Sie stattdessen Thread.SetApartmentState(). Sie müssen auch eine Nachrichtenschleife ausführen, Application.Run(). –