Résolu [VB.NET] Deux taches simultanée

Statut
N'est pas ouverte pour d'autres réponses.

Yelloww

Joueur CS:GO bitch!
Premium
Inscription
11 Mars 2012
Messages
574
Réactions
160
Points
20 088
RGCoins
45
Bonjour;
Je souhaite utiliser deux taches simultanée pour mon programme, je n'ai jamais eu a utiliser cela.
Voici ce que j'ai actuellement
Code:
    Private Sub redemarrage(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        ' Définition des noms de serveur
        If Form1.nomserveur = 0 Then
            nomserver = "Debug"
        End If


        If Form1.nomserveur = 1 Then
            nomserver = "DarkRP"
            Dim connInfo As New Renci.SshNet.PasswordConnectionInfo("adresse.ip.du.serveur", "serveur", Form1.mdp.Text)
            Dim sshClient As New Renci.SshNet.SshClient(connInfo)
            Dim cmd As Renci.SshNet.SshCommand
            Using sshClient
                sshClient.Connect()
                cmd = sshClient.RunCommand("/home/serveur/darkrp_redemarrage")
                sshClient.Disconnect()
                MsgBox("Serveur démarré!", MsgBoxStyle.Information, "Succès")
                Me.Close()
            End Using
        End If

        If Form1.nomserveur = 2 Then
            nomserver = "Jailbreak"
        End If

        If Form1.nomserveur = 3 Then
            nomserver = "SchoolRP"
        End If

        If Form1.demarragedarkrp = 1 And Form1.demarragejb = 0 And Form1.demarragesrp = 0 Then

        End If

        If Form1.demarragejb = 1 And Form1.demarragedarkrp = 0 And Form1.demarragesrp = 0 Then

        End If

        If Form1.demarragesrp = 1 And Form1.demarragejb = 0 And Form1.demarragedarkrp = 0 Then

        End If

        NsTheme1.Text = "Redemarrage du serveur: " & nomserver
        NsLabel1.Value1 = "Redemarrage du serveur: "
        NsLabel1.Value2 = nomserver

        'Demarrage du timer de restart

        Timer1.Start()

        NsLabel2.Value1 = "Temps restant avant le redemarrage: "
        NsLabel2.Value2 = temps & " secondes"

Quand je clique sur mon bouton qui est sur une autre form, cette forme ci dessus s'ouvre, et doit lancer un timer de 120 secondes.
Chaque seconde, on perd une seconde, c'est a dire, 120, 119, 118...
Le truc, c'est que le script que l'on tente d'executer en ssh est un script contenant des "sleep".
Le problème, c'est que une fois que le programme execute le script sur le dédié, le programme se gèle car il execute les sleep du script.
Les sleeps sont l'équivalent d'une pause.
Donc j'aimerai lancer les deux en même temps, le script ET le timer afin que mon texte se change aussi.
 
programme se gèle car il execute les sleep du script.
Lance l'exécution des script dans un BackgroundWorker, ça créera un second Thread qui lui s'occupera des script et le Thread principale sera libre pour une autre tâche donc ton UI ne freezera pas ;) (c'est un outils, il suffit de 3 méthodes et de 3 evenements pour le faire fonctionner)
 
Lance l'exécution des script dans un BackgroundWorker, ça créera un second Thread qui lui s'occupera des script et le Thread principale sera libre pour une autre tâche donc ton UI ne freezera pas ;) (c'est un outils, il suffit de 3 méthodes et de 3 evenements pour le faire fonctionner)
Je lance mon script en background worker, et laisse mon timer en principal?
 
Je ne comprend pas du tout comment utiliser le BackgroundWorker :(
Tu met l'outil sur ta Forms et ensuite dans le code qui exécute les actions que tu souhaite tu met BackgroundWorker.RunAsync() ( c'est pour lancer le BackgroundWorker)
Ensuite tu vas dans les evenements du backgroundWorker et tu double click sur "DoWork" et dans cette fonction tu met le code d'exécution des scripts.
Ensuite tu fais l'event suivant avec ProgressChanged et tu met la progression d'exécution des scripts et enfin pour finir tu double click sur l'event RunWorkerCompleted et tu indique que l'exécution est terminé (soit un message soit sur un label)
 
Tu met l'outil sur ta Forms et ensuite dans le code qui exécute les actions que tu souhaite tu met BackgroundWorker.RunAsync() ( c'est pour lancer le BackgroundWorker)
Ensuite tu vas dans les evenements du backgroundWorker et tu double click sur "DoWork" et dans cette fonction tu met le code d'exécution des scripts.
Ensuite tu fais l'event suivant avec ProgressChanged et tu met la progression d'exécution des scripts et enfin pour finir tu double click sur l'event RunWorkerCompleted et tu indique que l'exécution est terminé (soit un message soit sur un label)
Ouais, bon x)
Tu aurais un exemple de code? Car la le blabla j'ai pas trop compris, un exemple avec une incrémentation, ou autre histoire que je comprenne niveau code ;)
 
Ouais, bon x)
Tu aurais un exemple de code? Car la le blabla j'ai pas trop compris, un exemple avec une incrémentation, ou autre histoire que je comprenne niveau code ;)
Tiens ça sera toujours mieux qu'un de mes paragraphes :XD:
> tout est détaillé, les 3 méthodes + un exemple complet en bas :)
 
Cette réponse a aidé l'auteur de cette discussion !
Tu me dira si ça fonctionne, normalement ça devrait être bon avec ça, après tu peux même faire d'autres BackgroundWorker pour les autres actions lourde, ça évitera à ton interface de se figé :D
Là j'suis en phase d'apprentissage mdr, je teste ça plus tard dans la soirée :ok:
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut