2010-04-27 13 views
0

J'ai un thread qui doit créer une fenêtre contextuelle. Je démarre le thread à l'aide de ThreadPool.QueueUserWorkItem (new WaitCallback (CreatePopupinThread)) Le thread Thew crée un nouveau formulaire. L'application fructifie dans le nouveau constructeur Form à CreateHandle. Le fil de travail est verrouillé ... Comment puis-je résoudre ce problème?ThreadPool.QueueUserWorkItem nouveau formulaire CreateHandle Deadlock

Voilà comment je crée la forme

var form = new ConfirmationForm 
          { 
           Text = entry.Caption, 
           Label = entry.Text, 
          }; 

Dans le constructeur le fil entre dans une impasse

public ConfirmationForm() 
     { 
      InitializeComponent(); 
     } 
+2

vous suggérons de poster votre code (coupure mais comportement d'exposition) –

+0

Évitez de faire des opérations d'interface utilisateur dans le fil d'arrière-plan (secondaire), elles doivent être effectuées sur le fil principal. Ce sera la plupart du temps éviter l'impasse –

Répondre

0

je résolu le problème ... Les whas de blocage déclenché parce que la bande de roulement commence whas réalisés sous une forme activée de l'événement ... Je l'ai déplacé à un événement montré et maintenant il fonctionne ok ...

0

Je pense qu'il serait préférable de créer la « fenêtre » sur le thread d'interface utilisateur puis créez un fil dans la "fenêtre contextuelle" pour traiter ce que vous voulez qu'il fasse.

Comme je me doutais, vous ne pouvez pas montrer un formulaire créé sur un thread non-ui.
Voir cette réponse: Possible to construct form on background thread, then display on UI thread

+0

ce n'est pas si simple ... le fil est en réalité un "code utilisateur". L'utilisateur peut entrer le code C# qui est compilé lors de l'exécution et il est exécuté lors de certains événements. Ce "code utilisateur" a quelques méthodes misc et l'un d'entre eux affiche un message ... – bogdanbrudiu

+1

"L'utilisateur peut entrer le code C# compilé "... s'il vous plaît NOOOoooo! –

+0

Vous pouvez parfaitement créer un formulaire sur un nouveau thread tant qu'il s'agit d'un STA. –