IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Interférence dans un processus


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 23
    Par défaut Interférence dans un processus
    Bonjour,

    J'écris dans Notepad des données provenant d'une table. Le problème est : tant que le processus n'est pas terminé je ne peux rien faire. Si j'utilise ma souris pour faire une action quelconque, l'écriture s'arrête.

    Comment faire pour pouvoir continuer à utiliser mon application pendant l'écriture du fichier afin de ne pas devoir attendre la fin du processus

    Merci de vos réponses.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Async Sub btnImprimer_Click(sender As Object, e As EventArgs) Handles btnImprimer.Click
     
            Dim notepad As Process = New Process()
            notepad.StartInfo.FileName = "Notepad.exe"
            notepad.StartInfo.UseShellExecute = False
            notepad.StartInfo.RedirectStandardInput = True
     
            notepad.Start()
            notepad.WaitForInputIdle()
     
            OuvrirConnection()
     
            Dim Select_cmd As New SQLiteCommand("Select * FROM Phrases order by Etape")
            Select_cmd.Connection = ObjetConnection
            Dim reader As SQLiteDataReader = Select_cmd.ExecuteReader()
     
            If notepad.Responding Then
     
                Do While reader.Read
     
                    Dim maLigne As String = reader.Item("Phrase_ES") & vbCrLf &
                                            reader.Item("Phrase_FR") & vbCrLf
                    System.Windows.Forms.SendKeys.SendWait(maLigne)
                Loop
     
            End If
     
            FermerConnection()
            notepad.Close()
     
        End Sub

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    backgroundworker ou thread
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    Pourquoi passer par du Sendkeys et pas par les fonctions d'écriture dans un fichier ?
    Le SendWait attend la fin du traitement du message envoyé.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 23
    Par défaut Interférence suite
    Bonjour,

    J'ai essayé de suivre vos conseils mais sans succès. Dans les deux cas si j'utilise ma souris cela interromps l'écriture du texte.
    Probablement une mauvaise utilisation ou mauvaise compréhension !???

    Un peu d'aide serait bienvenue

    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    '---- version avec un Thread ----
     
    Private ThreadGenerer As System.Threading.Thread
     
     
    Private Sub StartThread()
        ThreadGenerer = New Threading.Thread(AddressOf GenererFichierPhrases)
        ThreadGenerer.Start()
    End Sub
     
     
    '---- Version avec un backgroundworker ----
    Private Sub btnVoca_bdMAJ_Click(sender As Object, e As EventArgs) Handles btnVoca_bdMAJ.Click
     
        BackgroundWorker1.RunWorkerAsync()
     
    End Sub
    Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
     
    	GenererFichierPhrases()
     
    End Sub
    Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
     
            MsgBox("Mise à jour terminée.")
     
    End Sub
     
    Public Function GenererFichierPhrases()
     
            Dim notepad As Process = New Process()
            notepad.StartInfo.FileName = "Notepad.exe"
            notepad.StartInfo.UseShellExecute = False
            notepad.StartInfo.RedirectStandardInput = True
     
            notepad.Start()
            notepad.WaitForInputIdle()
     
            OuvrirConnection()
     
            Dim Select_cmd As New SQLiteCommand("Select * FROM Phrases order by RANDOM() LIMIT 15")
            Select_cmd.Connection = ObjetConnection
            Dim reader As SQLiteDataReader = Select_cmd.ExecuteReader()
     
            If notepad.Responding Then
     
                Do While reader.Read
     
                    Dim maLigne As String = reader.Item("Phrase_ES") & vbCrLf &
                                            reader.Item("Phrase_FR") & vbCrLf
                    System.Windows.Forms.SendKeys.SendWait(maLigne)
                Loop
     
            End If
     
            FermerConnection()
            notepad.Close()
     
     
        End Function

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    SendKeys.SendWait envoie les infos à l'application active, donc si ce n'est pas le notepad, les infos ne sont écrites dans le notepad.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Async Sub btnImprimer_Click(sender As Object, e As EventArgs) Handles btnImprimer.Click
     
            OuvrirConnection()
     
            Dim Select_cmd As New SQLiteCommand("Select * FROM Phrases order by Etape")
            Select_cmd.Connection = ObjetConnection
            Dim reader As SQLiteDataReader = Select_cmd.ExecuteReader()
     
            Using fs As StreamWriter = File.CreateText("c:\temp\recup.txt")  'on créé un fichier vide c:\temp\recup.txt
                Do While reader.Read
     
                    Dim maLigne As String = reader.Item("Phrase_ES") & vbCrLf &
                                            reader.Item("Phrase_FR") & vbCrLf
                    fs.Write(maLigne) 'on ajoute maLigne au fichier c:\temp\recup.txt
               Loop
            End Using
            FermerConnection()
     
        End Sub

Discussions similaires

  1. [XUP] 2up ou XP ou bien les deux dans le processus de développement
    Par nabilblk dans le forum Méthodes Agiles
    Réponses: 4
    Dernier message: 01/11/2007, 19h58
  2. Executer commande dans un processus fils !
    Par jérôme.D dans le forum POSIX
    Réponses: 6
    Dernier message: 23/11/2006, 22h14
  3. lancer une page web dans un processus
    Par youp_db dans le forum Windows
    Réponses: 2
    Dernier message: 31/08/2006, 17h56
  4. Comment lancer une ligne de commande dans un processus en Java.
    Par doyouknow56 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 13/05/2006, 11h55
  5. Détection automatique d'1 appli dans les processus
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/01/2006, 23h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo