2016-04-20 4 views
0

J'ai une question sur l'appel dynamique et les threads. Supposons que j'ai un fil principal qui, à un moment donné, montre un dialogue. Lorsque je montre que Dialog mon mainThread obtient le mutexObject et s'arrête jusqu'à ce que l'utilisateur clique sur le bouton accepter. Donc, mon fil principal est en train de dormir. Si l'utilisateur n'appuie pas sur le bouton et que l'on attend qu'un événement se déclenche dans un autre thread. Les événements utilisent dynamicInvoke pour appeler la fonction précédente. Dans ce cas mainThread getUp et si je n'utilise pas le flagDialog, un second dialogue apparaîtra. C'est correct? Qu'est-ce que dynamicInvoke fait si le thread ne dort pas? il attendra que mainThread soit arrêté? Que se passe-t-il si je ferme les deux boîtes de dialogue pour savoir comment continuer l'exécution? Il empile différentes callstacks et sait comment récupérer l'ancien contexte?Invocation dynamique et thread de veille

Merci beaucoup.

Répondre

0

Au lieu de ce drapeau, vous pouvez avoir votre autre thread faire un

if(Monitor.TryEnter(mutexObject)) 
    raiseEvent(...); 
    Monitor.Exit(mutexObject); 

si vous le voulez de ne pas attendre que votre boîte de dialogue en cours, ou une complète

lock(mutexObject) 
{ 
    raiseEvent(); 
} 

si vous le voulez attendre.

Je ne suis pas trop longtemps dans C# moi-même, donc je ne vais pas essayer de répondre à ces questions là, je ne veux pas répandre des suppositions comme des connaissances :)