Je travaillais depuis un certain temps sur une application héritée et j'ai remarqué un petit problème. Le système est un client/serveur incroyablement complexe avec des frameworks standards et personnalisés.L'application héritée crée des boîtes de dialogue dans un thread non-ui
L'un des cadres personnalisés intégrés à l'application implique la validation des actions de workflow. Il trouve les erreurs potentielles, les sépare en avertissements et erreurs, et transmet les résultats au client. La principale différence entre les avertissements et les erreurs est que les avertissements demandent à l'utilisateur s'il souhaite ignorer l'erreur. Le problème que j'ai, c'est que la boîte de dialogue pour cette invite est créée sur un thread non-ui, et donc nous avons des problèmes d'inter-threading lorsque la boîte de dialogue est affichée. J'ai tenté d'invoquer l'affichage de la boîte de dialogue, mais cela échoue car le handle de fenêtre n'a pas été créé. (InvokeRequired renvoie false, ce qui signifie que dans ce cas, il ne peut pas trouver un handle correct dans son arbre parent, plutôt que de ne pas l'utiliser.)
Est-ce que quelqu'un a des suggestions pour créer cette boîte de dialogue? et obtenir le fil de l'interface utilisateur pour le configurer et l'appeler?
Cela ne fonctionne pas dans cette situation, comme je l'ai mentionné ci-dessus. Sans un handle de fenêtre, vous ne pouvez pas appeler invoke. – Frater
Avez-vous considéré le modèle ci-dessus et créé une classe EventArgs personnalisée qui passerait un message ou un type enum que vous pourriez ensuite utiliser pour créer l'instance appropriée du formulaire à partir de la partie else de l'instruction if. Cela éviterait votre problème de création du formulaire sur un thread non-ui. Vous ne transmettez qu'une sorte d'indicateur de type ou de message, puis agissez sur ce message à partir de l'ui-thread au lieu d'essayer d'invoquer une instance de formulaire à partir d'un autre thread que celui sur lequel il a été créé. – Doug
Cela pourrait valoir la peine, mais ce serait assez compliqué. Le code est assez horrible. Je vais y réfléchir davantage, merci. – Frater