Con l' occasione ho rispolverato un mio vecchio progetto a scopo didattico...un' interfaccia a cmd...mi sono accorto del problema appena ho modificato il codice, inoltre mentre il processo lavora non si può interagire con il Form e se quest' ultimo si chiude il processo rimane attivo a causa di 'pr.WaitForExit()'.
Nel codice sotto eseguo il processo in un nuovo Thread in modo da non "bloccare" il form e leggendo qui:
http://msdn.microsoft.com/it-it/libr...(v=vs.90).aspx
ho aggiunto il codice per ottenere il risultato voluto, funziona ma mi sembra un' accrocchio...stò usato Delegate e Invoke senza capirne appieno il reale utilizzo (stile codemonkey), manca lo "stop" del processo/Thread e non riesco a capire perchè
non funge....codice:AddHandler pr.OutputDataReceived, AddressOf pr_outline![]()
codice:Imports System.Threading Public Class Form1 Dim WithEvents pr As New Process() Dim pr_Thread As Thread = Nothing Delegate Sub pr_tbox_deleg(ByVal riga As String) Private Sub Button1_Click() Handles Button1.Click pr_Thread = New Thread(New ThreadStart(AddressOf pr_ping)) pr_Thread.Start() End Sub Private Sub pr_ping() Dim args As New ProcessStartInfo("cmd.exe") With args .Arguments = "/c ping -n 10 www.google.it" .RedirectStandardOutput = True .UseShellExecute = False .CreateNoWindow = True End With pr = Process.Start(args) pr.BeginOutputReadLine() End Sub Private Sub pr_outline(sendingProcess As Object, outLine As DataReceivedEventArgs) Handles pr.OutputDataReceived If Not String.IsNullOrEmpty(outLine.Data) Then tbox_appendtext(outLine.Data) End If End Sub Private Sub tbox_appendtext(ByVal riga As String) If TextBox1.InvokeRequired Then Dim a As New pr_tbox_deleg(AddressOf tbox_appendtext) Invoke(a, New Object() {riga}) Else TextBox1.AppendText(riga & vbCrLf) End If End Sub End Class

), manca lo "stop" del processo/Thread e non riesco a capire perchè
Rispondi quotando