Application Console sans arrêt [Résolu]

Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
- - Dernière réponse : XelectroX
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
- 14 oct. 2008 à 22:01
Bonjour à tous, j'ai un petit problème assez gênant
Le truc, c'est que j'aimerai bien savoir comment empêcher le programme de se terminer sans bloquer les composants COM et les fenêtres ouvertes
Je sais pas si les infos suivantes sont utiles mais je les donne toujours :
Application Console
Démarrage dans "Sub Main"
   Créations d'objets COM
   Ouverture d'une fenêtre
   Exécutions des dernières lignes avant End Sub
FINI  Ca ne va pas plus loin
J'ai déjà essayé avec "System.Diagnostics.Process.GetCurrentProcess.WaitForExit()" qui bloque mes Winsocks et ma fenêtre
J'ai essayé avec Form1.ShowDialog(), j'ai droit à l'aspect magnifique de Win2000
Et j'aimerai bien aussi ne pas devoir être oubligé d'ouvrir Form1

En espérant avoir été assez claire et avoir la réponse dès que possible
En tout cas, merci à tous ceux qui m'auraont lu !
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
2382
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
15
3
Merci
Bonsoir,
Tu fais tes affaires avec winsocks dans un thread, puis une fois lancé tu utilises la méthode Console.Read() dans le Sub Main() qui attendra une intervention de l'utilisateur sur le clavier pour continuer tes instructions dans ton sub main


++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Willi
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Ok merci beaucoup pour la réponse rapide
Commenter la réponse de XelectroX
Messages postés
2382
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
15
0
Merci
Si tu as choisi une autre solution, pourras-tu faire un retour d'expérience dessus et nous dire quelle piste as-tu suivit stp ! Cela m'interresse.

++
Commenter la réponse de cs_Willi
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Ok dès que j'aurai fais les tests, je vous en informerai. Mais je pense que je vais réécrire le code pour utiliser des threads.
J'ai aussi essayé avec un thread qui exécutait "System.Diagnostics.Process.GetCurrentProcess.WaitForExit()" mais ca ne fonctionnait pas.
Aussi n'ayant pas encore tout réécrit pour utliser les threads, y aurait-il moyen d'avoir un petit exemple, car moi et le threads, ca fait 2. Surtout que j'utilise un array d'AxWinsock créés dynamiquement pour et qu'il faut toujours gérer les évênements de max 10000 sockets avec la même fonction et pour utiliser l'AxWinsock, je dois l'associer avec une form (pas besoin de l'afficher, un simple Dim frmTmp as new Windows.Forms.Form suffit). Donc aussi comment associer la fonction à l'évenement du socket (AddHandler fonctionnera-t-il toujours ?)

N'étant pas encore chez moi, je ne saurai expérimenter ca de suite mais dès que ce sera fait, j'en dirai plus
Commenter la réponse de XelectroX
Messages postés
2382
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
15
0
Merci
Une simple question, pourquoi utilises-tu le composants COM winsocks ? Le framework a tout ce qu'il faut pour !
Commenter la réponse de cs_Willi
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
C'est une bien bonne question, mais j'ai mes bonnes habitudes avec Winsock(qui fonctionne avec des évènements) de mon bon vieux VB5 et j'essayait de finir le programme dans les plus courts délais
Un jour, faudra que je m'écrive une classe qui fonctionne de la même manière avec les mêmes noms de fonctions, propriétés, évènements ... (je n'en ai pas encore trouvé sur le site )
Commenter la réponse de XelectroX
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Je n'arrive à vraiment rien faire en "threadé" mais il faudra bien que je fasse ma classe socket (simili Winsock)
Ayant très peu de temps, je fais ce que je peux avec le temps que j'ai donc c'est pas encore pour tout de suite
Si quelqu'un arrive à faire quelque chose de mon problème, j'attends toujours des solutions car celle de la fenêtre ouverte ne convient pas dans tout les cas ...
Commenter la réponse de XelectroX
Messages postés
2382
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
15
0
Merci
Bonsoir,
Comment créés-tu ton thread dans lequel tu joues avec les contrôles winsocks ? Et comment l'executes-tu ?
Commenter la réponse de cs_Willi
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Recréation des arrays de winsocks et la mise en écoute sont dans la Sub Main2()

Public WithEvents scklisten As New MSWinsockLib.Winsock
Public sckmain() As AxMSWinsockLib.AxWinsock
Dim used() As Boolean

Sub Main()
   Dim Ths As System.Threading.ThreadStart = New System.Threading.ThreadStart(AddressOf Main2) 
   Dim Th As System.Threading.Thread = New System.Threading.Thread(Ths) 
   Th.Start()
End sub

Sub Main2()
        'Recréation des socket array
        ReDim sckmain(My.Settings.maxclient - 1)
        ReDim used(My.Settings.maxclient - 1)
        'Préparation de l'écouteur
        scklisten.Bind(firmware.Port, "0.0.0.0")
        scklisten.Listen()
End sub

Private Sub scklisten_ConnectionRequest(ByVal requestID As Integer) Handles scklisten.ConnectionRequest
        For i As Integer = 0 To used.Length - 1
            If used(i) = False Then
                sckmain(i) = New AxMSWinsockLib.AxWinsock
                frmLog.Controls.Add(sckmain(i))
                used(i) = True



                scklisten.Close()
                sckmain(i).Accept(requestID)
                AddHandler sckmain(i).CloseEvent, AddressOf sckmain_CloseEvent
                AddHandler sckmain(i).DataArrival, AddressOf sckmain_DataArrival
                AddHandler sckmain(i).Error, AddressOf sckmain_Error



                Exit For
            End If
        Next
        scklisten.Listen()
    End Sub
Commenter la réponse de XelectroX
Messages postés
211
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009
0
Merci
Correction :
Sub Main()
   Dim Ths As System.Threading.ThreadStart = New System.Threading.ThreadStart(AddressOf Main2) 
   Dim Th As System.Threading.Thread = New System.Threading.Thread(Ths) 
   Th.Start() 
   Console.Read()
End sub
Commenter la réponse de XelectroX