J'ai un projet C++ gui présentant un comportement étrange. Sur ma machine, le code compile et fonctionne très bien. Cependant, sur une autre machine, le code compile mais finit par s'exécuter dans MTA en quelque sorte. Évidemment, être dans MTA cause toutes sortes de problèmes d'exécution pour l'interface graphique. Voici ma principale:L'application GUI Visual C++ bloquée en mode MTA
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew Form1());
return 0;
}
je peux mettre un point d'arrêt sur la première ligne de principale de vérifier l'état de l'appartement, et sur les machines qui construisent/exécuter correctement, il sera « STA », comme prévu. Cependant, sur les machines problématiques, ce sera "MTA". Je peux même essayer de passer le mode appartement à STA, sans effet.
J'ai essayé de supprimer les répertoires de débogage/libération et de nettoyer le projet avant de compiler, sans exécuter de débogueur, mais en vain. Je ne peux déterminer aucun modèle auquel les machines fonctionnent et qui ne fonctionnent pas. Si je compile l'exe sur une machine de travail et l'amène à une machine problématique, il s'exécutera correctement, donc je pense que c'est en quelque sorte un problème d'environnement de construction. Toutes les machines impliquées exécutent Windows XP avec Visual Studio 2008 standard. Des idées?
.Net ne prend pas en charge la modification de l'état d'appartement pour un thread géré une fois qu'il est en cours d'exécution, ce qui explique cela. Pour le reste je n'ai aucune idée - quel étrange problème ... –