Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [VB.NET] Aprire un secondo form "di LOG" e svincolarlo da quello che succede nel principale

  1. #1

    [VB.NET] Aprire un secondo form "di LOG" e svincolarlo da quello che succede nel principale

    Ciao a tutti, vi leggo da tanto ma scrivo per la prima volta, quindi innanzitutto complimenti!!!
    Spero che mi possiate aiutare: ho creato un piccola applicazione che utilizzo per copiare una serie di file e cartelle prima di lanciare un applicativo (un classico .exe) esterno. Funziona tutto ma volevo creare un form di log da aprire in background.
    L'ho definito...
    codice:
    Public frmLog As New LogLancio

    ...quando avvio l'applicazione apro il pannello...
    codice:
    frmLog.Show()

    ...ad ogni operazione scrivo il log sul form LogLancio (contiene una ListView)...
    codice:
    frmLog.InserisciTesto("TESTO DI PROVA")
    codice:
    Public Class LogLancio
       Friend Sub InserisciTesto(ByVal Testo As String)
            RecuperoDataOraNow()
            Dim RigaListaLog As ListViewItem
            RigaListaLog = ListaLOG.Items.Add(YYYY & "-" & MM & "-" & DD)
            RigaListaLog.SubItems.Add(HS & ":" & MS & ":" & SS)
            RigaListaLog.SubItems.Add(Testo)
            RigaListaLog.Selected = True
            RigaListaLog.EnsureVisible()
            RigaListaLog = Nothing
       End Sub
    End Class

    ...e avvio finalmente il mio eseguibile esterno...
    codice:
    ShellAndWait("MioEseguibile.exe")
    codice:
    Friend Sub ShellAndWait(ByVal ProcessPath As String)
       Dim objProcess As System.Diagnostics.Process
       Try
           objProcess = New System.Diagnostics.Process()
           objProcess.StartInfo.FileName = ProcessPath
           objProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal
           objProcess.Start()
           objProcess.WaitForExit()
           objProcess.Close()
       Catch
           MsgBox("Errore nell'avvio dell'applicazione " & ProcessPath & ".", MsgBoxStyle.Critical)
       End Try
    End Sub

    Funziona tutto, il problema, se così lo si vuol chiamare, è che il form di LOG si apre ma non è possibile toccarlo finché MioEseguibile è in esecuzione mentre io vorrei poterlo ingrandire, ridurre ad icona, cambiargli la dimensione o selezionare una riga della ListView. Potrei eseguire MioEseguibile in un altro thread ma ho bisogno che il form principale da cui viene lanciato rimanga in attesa in quanto all'uscita deve fare delle altre operazioni subordinate all'esecuzione di MioEseguibile.
    Idee?
    Grazie mille ancora e buona serata a tutti.
    Marco

  2. #2

  3. #3
    Avviare il mio eseguibile esterno e aspettare.

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,100
    Appunto. Quindi il processo è bloccato fino a che non chiudi il tuo eseguibile.

  5. #5
    Esatto, il processo deve rimanere bloccato ma volevo sapere comunque se esiste il modo di sbloccare per lo meno la parte grafica del pannello di log che ho aperto. Mi sembra così assurdo che, finché il pannello principale è bloccato in attesa della fine del mio eseguibile esterno, io non riesca neanche a ridurlo ad icona.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    35,878
    Quote Originariamente inviata da MitchBook Visualizza il messaggio
    io non riesca neanche a ridurlo ad icona.
    La parte grafica viene gestita dallo stesso thread, quindi, se lo blocchi anche la parte grafica è bloccata.

    Devi lavorare con più thread.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Devi lavorare con più thread.
    Ci ho provato ma probabilmente, evidentemente, sbaglio qualcosa. La schermata mi si svincola ma dal thread principale non riesco più a chiamare le procedure per inserire le righe nella ListView. Se qualcuno mi saprebbe indicare un metodo, una guida o un esempio gliene sarei molto grato.
    Purtroppo .NET non è la mia "lingua madre" e quando mi ritrovo a fare questi lavoretti, per quanto mi piaccia, ci metto sempre un po' a saltarci fuori.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    35,878
    Allora, la via è il secondo thread.

    Detto questo, devi imparare le regole della programmazione multithreading, che non sono banali, ma trovi tanto su Internet.

    Del resto, se non si sa cosa fai, cosa hai scritto, che errori hai avuto, che dirti?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2017 vBulletin Solutions, Inc. All rights reserved.