Oppure

Loading
26/03/14 16:30
No.

Un Process è un oggetto che può essere completamente controllato e non solo avviato con Start.

Crea un oggetto Process a partire da quello che vuoi eseguire e controlla quando termina.
26/03/14 16:48
trattobasso
E se me la fossi scampata così:?

System.Threading.Thread.Sleep(3000)


Ovvio che la tua soluzione è molto più intelligente perchè permette di controllare lo stato dell'esecuzione del codice...la proverò di sicuro!

Grazie a tutti ragazzi.


_______
Non riesco a mettere la firma, frase che mi identifica bene...
Anche un orologio fermo, due volte al giorno segna l'ora giusta.
aaa
26/03/14 17:57
R0gerBlack
Ora che ho visto qualcosa di più del codice ti potrei dare dei consigli per migliorare questo programma, visto che dal punto di vista logico ci sono dei passi che puoi saltare:

1. Non ti serve ricorrere a 7zip per estrarre un file .zip
2. Non è necessario decomprimere il file, eliminare quello di destinazione e muovere quello estratto:
Metti nella variabile archivedir la directory dell'archivio, e in extractdir la directory finale. La logica del codice sta nell'estrarre lo zip direttamente nella cartella
Imports System.IO.Compression
Imports System.Net

Private Sub Extract_Zip()
Dim archivedir, extractdir As String
archivedir = My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Easy Weld\Temp\Easy Weld.Zip"
extractdir = My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Easy Weld\"
Using archive As ZipArchive = ZipFile.OpenRead(archivedir)
            For Each entry As ZipArchiveEntry In archive.Entries
                Try
                    Dim f As New FileInfo(Path.Combine(extractdir, entry.FullName))
                    If Not IO.Directory.Exists(f.Directory.FullName) Then IO.Directory.CreateDirectory(f.Directory.FullName)
                    entry.ExtractToFile(Path.Combine(extractdir, entry.FullName), True)
                Catch ex As Exception
                End Try
            Next
        End Using
End Sub

Il parametro True in entry.ExtractToFile si occuperà di sovrascrivere eventualmente il file. Prova questo codice e dimmi se ti funziona.

Inoltre se proprio vuoi fare le cose in modo formale, puoi gestire un download in modo asincrono e fare il modo che il programma non si blocchi mentre è impegnato a scaricare il file:

'Dichiarazioni globali
Private WithEvents W As Net.WebClient

Private Sub Download_Zip()
Dim TempDir, archivedir As String
TempDir = My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Easy Weld\Temp\"
archivedir = TempDir + "Easy Weld.Zip"
W = New Net.WebClient
        Try
            If Not IO.Directory.Exists(TempDir ) Then
                IO.Directory.CreateDirectory(TempDir )
            Else
                Dim dir As New DirectoryInfo(TempDir )
                My.Computer.FileSystem.DeleteDirectory(dir.FullName, FileIO.DeleteDirectoryOption.DeleteAllContents)
            End If
            W.DownloadFileAsync(New Uri("http://xxxxx/download/easy_weld/applicazione/Easy Weld.zip"), archivedir)

        Catch ex As Exception
            
        End Try
End Sub

Supponiamo che hai una label chiamata lblStatus per mostrare il progresso
Private Sub W_DownloadProgressChanged(ByVal sender As Object, ByVal e As Net.DownloadProgressChangedEventArgs) Handles W.DownloadProgressChanged        
Dim MBreceived As Double
        MBreceived = Math.Round(e.BytesReceived / 1048576, 2, MidpointRounding.AwayFromZero)
        Dim MBtoreceive As Double
        MBtoreceive = Math.Round(e.TotalBytesToReceive / 1048576, 2, MidpointRounding.AwayFromZero)


        lblStatus.Text =
        String.Format("MB ricevuti: {0} MB/{1} MB  ({2:N0}%)", _
        MBreceived, MBtoreceive, e.ProgressPercentage)

    End Sub

E infine
  Private Sub W_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles W.DownloadFileCompleted
        If e.Cancelled Then
            'Download annullato
        ElseIf e.Error IsNot Nothing Then
            'Errore durante il download
        Else
            'Download completato
             Extract_Zip()
        End If
    End Sub


Potresti dover adattare un po' il codice visto che non ho il tuo programma sottomano, comunque questo codice dovrebbe andar bene.
Vantaggi in un metodo come questo?
1. Download asincrono ed estrazione solo dopo il termine del download
2. Estrazione senza l'uso di programmi di terze parti, quindi non devi né avviare né aspettare che processi particolari si chiudono
3. Estrazione diretta alla directory interessata senza scomporla in più passaggi


N.B.: Se ti piace il metodo di nessuno e aspettare che il processo si chiuda, non serve dichiarare un'oggetto Process ma usare l'istruzione
Process.Start("processo.exe").WaitForExit()

Quell'istruzione "congelerà" il tuo programma finché il processo che hai avviato non verrà terminato.
Ultima modifica effettuata da R0gerBlack 26/03/14 18:02
aaa
26/03/14 18:58
trattobasso
però...adesso non posso usare la scusa della differenza tra la quantità delle tue stelle e le mie....sono proprio ignorante io (nel senso vero che ignoro...)
ci provo di sicuro perchè ha una logica molto più professionale, quello che ho fatto io sembra più un file bat che fa tante cose in sequenza effetivamente senza alcun particolare controllo.
ti ringrazio davvero e ringrazio tutti quelli che sono intervenuti, un grande aiuto come sempre.:hail:
aaa