Attendere il termine di un processo ma avere pulsante attivo per chiud...

lunedì 08 giugno 2009 - 13.22

porro Profilo | Newbie

Ciao a tutti,

Il mio programma deve poter eseguire in sequenza determinati processi il che significa che da un Form1, premendo un pulsanti si avvia l'esecuzione di diverse subs (in sequenza) , ognuna che apre un processo e aspetta che esso termini prima di passare alla sub successiva.
La mia necessità è quella di poter interrompere il processo nel caso l'utente non voglia aspettare il completamento del processo avviato (che si chiude in automatico).

Quando definisco e avvio il processo, sospendo l'esecuzione del mio programma con il comando "Diagnostics.Process.WaitForExit()". Purtroppo però il mio programma diventa inattivo quindi non ho nessun pulsante attivo per poter eseguire il comando kill process.

Avete qualche soluzione da proporre?

Il codice che ho realizzato (che non assolve a quanto richiesto), ha un form1 dove viene lanciato l'avvio del processo e un form2 che viene visualizzato quando il processo è in esecuzione e contenente il pulsante per chiudere il processo in anticipo:

Dim run_simulation As New System.Diagnostics.Process run_simulation .EnableRaisingEvents = True run_simulation .StartInfo.WorkingDirectory = Form1.folder_work run_simulation .StartInfo.FileName = "run_auto_simulation.bat" run_simulation .StartInfo.WindowStyle = rocessWindowStyle.Minimized run_adams.Start() Form1.Cursor = Cursors.WaitCursor 'Form2 where there is Stop Button to kill run_simulation process Form2.Show() Form2.Focus() run_simulation.WaitForExit() Form1.Cursor = Cursors.Default


Potrei aprire il Form2 con un backgroundworker in modo che resti attivo per poter interrompere il processo "run_simulation"??

Jeremy Profilo | Guru

Ciao Marco.
Puoi eseguire le operazioni in sequenza, in un thread separato (quindi diverso da quello principale), in modo che la tua applicazione non subisca il blocco dovuto al WaitForExit.

Facci sapere...
Ciao

porro Profilo | Newbie

Ciao Jeremy,

ho risolto con un backgroundworker che esegue il processo. Mi rimane però un problema, quando interrompo il processo vorrei che si interrompesse l'esecuzione in sequenza delle varie subs, se utilizzo "Exit Sub" interrompo l'esecuzione della sub corrente ma poi passo alla sub successiva; io invece vorrei evitare di eseguire tutte le sub conseguenti.
Mi spigmo meglio illustrando la struttura del del software(in modo molto schematico):

private sub button1_click() call sub1 call sub2 call sub3 end sub

La sub1 avvia il backgroundworker e se esso viene cancellato vorrei che non venissero eseguite le sub2 e sub3. Purtroppo se utilizzo "exit sub" esco dalla sub1 ma poi esegue le rimanenti. Come posso fare?

Grazie in anticipo dell'aiuto.

Jeremy Profilo | Guru

Ciao Marco.
Ci sono diverse soluzioni ...... potresti impostare un flag e valutarlo prima di chiamare la routine successiva, oppure, potresti sollevare un eccezione all'interno delle routine Sub1,Sub2,Sub3 e gestirla nella routine principale.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Facci sapere...
Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5