none
Pendant le traitement mon application freeze RRS feed

  • Question

  • Bonjour,

    voici le code :

    Private Sub ListBox1_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop
            Dim data As String() = CType(e.Data.GetData(DataFormats.FileDrop), String())
            For Each str1 As String In data
                If str1.ToLower.EndsWith("monfichier") Then
                    ListBox1.Items.Clear()
                    Me.ListBox1.Items.Add(("Mon fichier : " & Path.GetFileName(str1)))
                    Dim process As New Process
                    process.StartInfo.CreateNoWindow = True
                    process.StartInfo.UseShellExecute = False
                    process.StartInfo.FileName = "mon code"
                    process.StartInfo.Arguments = "Mon code"
                    process.Start()
                    process.WaitForExit()
                    process.Close()
                    Me.ListBox1.Items.Add(("Traitement Terminer : " & Path.GetFileName(str1)))
                Else
                    MessageBox.Show("Veuillez séléctionner un fichier !", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End If
            Next

    quand je déplace mon fichier dans listbox1, pendant le traitement du fichier mon application freeze et une fois terminer ça freeze plus.

    le probléme vient : process.WaitForExit

    J'arrive pas trouver une solution pendant le traitement pour éviter que ça freeze?

    avez-vous une solution pour éviter pendent le traitement?

    cordialement,

    dimanche 4 juin 2017 17:03

Réponses

  • Bonjour,

    Merci de votre réponse Nourdine mais j'ai trouver la solution avec thread . mon application ne freeze pas pendant le traitement du fichier.

    voici la solution :

    Dim threads As Thread Dim str1 As String Private Delegate Sub Listbox1_Add_Delegate(ByVal lsb As String) Private Sub ListBox1_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop Dim data As String() = CType(e.Data.GetData(DataFormats.FileDrop), String()) For Each Me.str1 In data If str1.ToLower.EndsWith("monfichier") Then ListBox1.Items.Clear() Me.ListBox1.Items.Add(("Mon fichier : " & Path.GetFileName(str1))) threads = New Thread(AddressOf lecture) threads.Start() Else MessageBox.Show("Veuillez séléctionner un fichier !", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Next End Sub Private Sub lecture() Dim process As New Process process.StartInfo.CreateNoWindow = True process.StartInfo.UseShellExecute = False process.StartInfo.FileName = "mon code" process.StartInfo.Arguments = "Mon code" process.Start() process.WaitForExit() process.Close() Me.ListBox1.Invoke(New Listbox1_Add_Delegate(AddressOf listbox1_add), "Traitement Terminer : " & Path.GetFileName(str1)) End Sub

    Private Sub listbox1_add(ByVal lsb As String)
            ListBox1.Items.Add(lsb)
        End Sub

    Cordialement,

    • Marqué comme réponse zorro591 lundi 5 juin 2017 09:59
    lundi 5 juin 2017 09:57

Toutes les réponses

  • Bonjour,

    Avez-vous essayé de lancer le process en asynchrone?

    Rendre une tâche en asynchrone évite de freezer l'écran.

    Voici un exemple de code qui permettra de rendre votre Process en asynchrone : 

    Private Shared Function RunProcessAsync(fileName As String) As Task
    	' there is no non-generic TaskCompletionSource
    	Dim tcs = New TaskCompletionSource(Of Boolean)()
    
    	Dim process = New Process() With { _
    		Key .StartInfo = {Key .FileName = fileName}, _
    		Key .EnableRaisingEvents = True _
    	}
    
    	process.Exited += Function(sender, args) 
    	tcs.SetResult(True)
    	process.Dispose()
    
    End Function
    
    	process.Start()
    
    	Return tcs.Task
    End Function

    J'espère que j'ai bien répondu à votre question.

    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    lundi 5 juin 2017 07:07
  • Bonjour,

    Merci de votre réponse Nourdine mais j'ai trouver la solution avec thread . mon application ne freeze pas pendant le traitement du fichier.

    voici la solution :

    Dim threads As Thread Dim str1 As String Private Delegate Sub Listbox1_Add_Delegate(ByVal lsb As String) Private Sub ListBox1_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop Dim data As String() = CType(e.Data.GetData(DataFormats.FileDrop), String()) For Each Me.str1 In data If str1.ToLower.EndsWith("monfichier") Then ListBox1.Items.Clear() Me.ListBox1.Items.Add(("Mon fichier : " & Path.GetFileName(str1))) threads = New Thread(AddressOf lecture) threads.Start() Else MessageBox.Show("Veuillez séléctionner un fichier !", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Next End Sub Private Sub lecture() Dim process As New Process process.StartInfo.CreateNoWindow = True process.StartInfo.UseShellExecute = False process.StartInfo.FileName = "mon code" process.StartInfo.Arguments = "Mon code" process.Start() process.WaitForExit() process.Close() Me.ListBox1.Invoke(New Listbox1_Add_Delegate(AddressOf listbox1_add), "Traitement Terminer : " & Path.GetFileName(str1)) End Sub

    Private Sub listbox1_add(ByVal lsb As String)
            ListBox1.Items.Add(lsb)
        End Sub

    Cordialement,

    • Marqué comme réponse zorro591 lundi 5 juin 2017 09:59
    lundi 5 juin 2017 09:57