Application Console sans arrêt

Résolu
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009 - 8 oct. 2008 à 22:13
XelectroX Messages postés 209 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 !

10 réponses

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
8 oct. 2008 à 22:35
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


++
3
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
8 oct. 2008 à 22:37
Ok merci beaucoup pour la réponse rapide
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
8 oct. 2008 à 22:45
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.

++
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
9 oct. 2008 à 15:17
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
9 oct. 2008 à 15:38
Une simple question, pourquoi utilises-tu le composants COM winsocks ? Le framework a tout ce qu'il faut pour !
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
9 oct. 2008 à 15:43
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 )
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
13 oct. 2008 à 21:28
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 ...
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
14 oct. 2008 à 21:53
Bonsoir,
Comment créés-tu ton thread dans lequel tu joues avec les contrôles winsocks ? Et comment l'executes-tu ?
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
14 oct. 2008 à 22:00
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
0
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
14 oct. 2008 à 22:01
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
0
Rejoignez-nous