Normalement, le procédé de point d'entrée pour les fils de WPF ont le [STAThreadAttribute]
ensemble pour la ThreadMethod
, ou avoir l'état d'appartement réglé sur STA lors de la création du fil en utilisant Thread.SetApartmentState()
. Toutefois, cela ne peut être défini avant que le thread est démarré.
Si vous ne pouvez pas appliquer cet attribut au point d'entrée de l'application du fil que vous effectuez cette tâche, procédez comme suit:
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] DisplayFormThread private void() { essayer { MainWindow ObjMain = new MainWindow(); ObjMain.Show(); } catch (Exception ex) { Log.Write (ex); } } – anbuselvan
Désolé, je ne comprends pas votre commentaire. 'STAThreadAttribute' peut être raccourci en' STAThread'; c'est supporté. C'est ce que tu veux dire? –
Cela ne fonctionne pas, [STAThread] n'est reconnu que sur le point d'entrée du programme (Main). Utilisez Thread.SetApartmentState() à la place. Vous devrez également exécuter une boucle de message, Application.Run(). –