Fortschrittsbalken für das kopieren einer Datei aus 'Meine.Ressourcen' VB.net

Ich versuche, kopieren Sie eine Datei aus 'Meine.Ressourcen " mit einem Fortschrittsbalken, habe ich die Suche auch über viele andere Fortschrittsanzeige beim kopieren von Dateien Skripte, aber keiner von Ihnen unterstützen das kopieren von der internen Dateien. hier ist mein code:

Private Sub Install_Click(sender As Object, e As System.EventArgs) Handles Install.Click
    InstallDialog.ShowNewFolderButton = True
    InstallDialog.ShowDialog()
    If Not (IO.Directory.Exists(IO.Path.GetTempPath & "extract")) Then
        IO.Directory.CreateDirectory(IO.Path.GetTempPath & "extract")
    End If
    If Not (InstallDialog.SelectedPath = "") Then
        Dim exepath As String = IO.Path.GetTempPath & "extract\7zG.exe"
        Dim archpath As String = IO.Path.GetTempPath & "extract\arch.7z"
        If File.Exists(archpath) = False Then
            Dim b As Byte() = My.Resources.arch
            Dim TempFile As IO.FileStream = IO.File.Create(archpath)
            TempFile.Write(b, 0, b.Length)'Copies the archive to disk
            TempFile.Flush()
            TempFile.Close()
        End If
        If File.Exists(exepath) = False Then
            Dim c As Byte() = My.Resources.zipexe
            Dim TempFile As IO.FileStream = IO.File.Create(exepath)
            TempFile.Write(c, 0, c.Length)'Copies the 7-zip executable to disk
            TempFile.Flush()
            TempFile.Close()
        End If
            Dim p As New ProcessStartInfo
            p.WindowStyle = ProcessWindowStyle.Normal
            p.FileName = exepath
            p.Arguments = " x " & archpath & " -mmt -aoa -o" & InstallDialog.SelectedPath
            Dim Extract As Process = Process.Start(p)'runs 7-zip to extract the archive
            Dim i As Boolean = True
            Do While i = True
                If Extract.HasExited = True Then
                    i = False
                Else
                    Threading.Thread.Sleep(2000)
                End If
            Loop
            Msgbox("Installation Complete")            
    End If
End Sub

meiner progress-bar wird als "copyprog',
'arch.7z' ist über 150Mb und das UI hängt, während es kopieren, meine Benutzer sind mit sehr langsamen Rechnern und wollen, haben einige andere Antwort als die app einfrieren auf den button klicken.

ein Grund, warum Ihre UI hängt: die Verwendung von thread.sleep. Mit dieser auf dem UI-Thread ist fast nie ein godd Idee.
ich habe praktisch keine Erfahrung in der Durchzug, den Grund habe ich den thread.schlafen dort ist, denn ohne Sie wird es maxes meine CPU-Auslastung
Wollen Sie eine "genaue" feedback von whats going on (z.B. "dekomprimiert xx%") oder willst du einfach nur "einige" feedback (wie "kopieren ...", "entpacken ..." etc)?
Ich würde lieber etwas wie "nach x Anzahl der bytes, die kopiert wurden, aktualisieren Sie die Fortschritt-bar", sondern eine prozentuale Wert ist in Ordnung, ich brauche nur feedback für das kopieren Prozess 'Tempfile.schreib' für die Dekompression hat es 7-Reißverschlüssen auf der GUI
Verwenden Sie den Prozess.Exited-event statt. Man kann nicht den Fortschritt von einem externen Prozess.

InformationsquelleAutor Connor Galea | 2012-12-18

Schreibe einen Kommentar