Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rochro

#11
Cita de: Eleкtro en 12 Noviembre 2014, 18:24 PM
Depende.

1) ¿Al clickar en el linklabel es cuando quieres detener Ping?


Si. Quiero que al hacer clic en el linklabel se cancele el task. Trato de entender el código pero ya me confundí :(

Disculpa por tanta molestia elektro.
#12
Cita de: Eleкtro en 11 Noviembre 2014, 19:41 PM
De nada, para eso estamos, de todas formas esto que te expliqué es quizás lo más básico de la programación asíncrona en .Net.


Tengo un inconveniente y quisiera que me ayudes. En el código que me entregaste sólo aumenté el -t al comando ping pero al crear un linklabel para que vacie los campos, el comando ping se sigue ejecutando. Como lo puedo parar?

Código (vbnet) [Seleccionar]
...
Private ReadOnly Property PingArguments As String
        Get
            Return String.Format("ping.exe ""{0}.{1}.{2}.{3}"" -t",
                                TextBox1.Text, TextBox2.Text,
                                TextBox3.Text, TextBox4.Text)
        End Get
    End Property
...

Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        Dim x As Control
        For Each x In Me.Controls
            If TypeOf x Is System.Windows.Forms.TextBox Then x.Text = ""
        Next

    End Sub

#13
Cita de: Eleкtro en 11 Noviembre 2014, 18:29 PM

Sea cual sea el error que te indique imagino que es porque estás intentando modificar un control desde un Thread distinto al Thread donde creaste el cotnrol. es decir, tienes el control txtResults en el thread "X" e intentas modificarlo desde el thread "Y", no puedes modificar un control así como así desde otro thread, primero debes comprobar si el control necesita ser invocado, y después, invocarlo.


Woww.. en serio eres un capo en esto. Muchas gracias por tu ayuda. Era exactamente lo que queria. Prometo que seré mas cuidadosa con mis publicaciones y poner la información completa.

Gracias por todo.  :D
#14
Buen día a todos, quisiera que me apoyen en poder ver cual es mi error ya que al momento de ejecutar la app se marca error en la linea txtResults.Text = SR.ReadToEnd.
La idea es que en vez que se muestre en la ventana del cmd, figure en el cuadro de texto txtResults y sería mucho mejor si fuera continuo o sea el resultado de ping 127.0.0.1 -t figure en el cuadro de texto.

Código (vbnet) [Seleccionar]
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
        Dim CMDThread As New Threading.Thread(AddressOf CMDAutomate)
        CMDThread.Start()
    End Sub
    Private Sub CMDAutomate()
        Dim PROCESO As New Process
        Dim INFO As New System.Diagnostics.ProcessStartInfo
        INFO.FileName = "cmd"
        INFO.RedirectStandardInput = True
        INFO.RedirectStandardOutput = True
        INFO.UseShellExecute = False
        PROCESO.StartInfo = INFO
        PROCESO.Start()
        Dim SR As System.IO.StreamReader = PROCESO.StandardOutput
        Dim SW As System.IO.StreamWriter = PROCESO.StandardInput
        Dim comandoping As String = String.Concat("ping ", TextBox1.Text, ".", TextBox2.Text, ".", TextBox3.Text, ".", TextBox4.Text)
        SW.WriteLine(comandoping)
        SW.WriteLine("exit")
        txtResults.Text = SR.ReadToEnd
        SW.Close()
        SR.Close()
    End Sub


Gracias por todo. Saludos.
#15
.NET (C#, VB.NET, ASP) / REDUCIR CÓDIGO.NET
7 Julio 2014, 23:08 PM
Hola a todos!
Estoy realizando una aplicación donde el cual tiene 3 botones en donde se ejecutan diferentes comandos en cada botón a un mismo archivo (la aplicación es un convertidor). La aplicación ya esta hecha, lo que pasa es que se repite el código varias veces, entonces quisiera saber como podría hacer para que  se realizo el evento click en tal botón entonces ejecutar cierto comando.

No se si me dejo entender. Pero de todas maneras adjuntaré el código completo.

pd. Mi problema también está en que no imprime en archivo de texto.

Código (vbnet) [Seleccionar]
Imports System
Imports System.IO
Imports System.IO.StreamWriter

Public Class Form1
   Inherits System.Windows.Forms.Form

   Private Results As String
   Private Delegate Sub delUpdate()
   Private Finished As New delUpdate(AddressOf UpdateText)

   Private Sub btnexaminar_Click(sender As Object, e As EventArgs) Handles btnexaminar.Click
       Dim Dir As New FolderBrowserDialog
       If Dir.ShowDialog = Windows.Forms.DialogResult.OK Then
           TextBox1.Text = Dir.SelectedPath
       End If
   End Sub

   Private Sub btndat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndat.Click
       Dim midirectorio As String = TextBox1.Text
       Dim CMDThread As New Threading.Thread(AddressOf CMDAutomate)
       If midirectorio = "" Then
           MessageBox.Show("Debe seleccionar la ruta donde se encuentra la data", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error)
       Else
           My.Computer.FileSystem.CopyFile("C:\Program Files\convert data\runpkr00.exe", midirectorio & "\runpkr00.exe", Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing)
       End If
       CMDThread.Start()
       

   End Sub
   Private Sub CMDAutomate()
       Dim midirectorio As String = TextBox1.Text
       Dim myprocess As New Process
       Dim StartInfo As New System.Diagnostics.ProcessStartInfo
       StartInfo.FileName = "cmd"
       StartInfo.RedirectStandardInput = True
       StartInfo.RedirectStandardOutput = True
       StartInfo.UseShellExecute = False
       StartInfo.CreateNoWindow = True
       myprocess.StartInfo = StartInfo
       myprocess.Start()
       Dim SR As System.IO.StreamReader = myprocess.StandardOutput
       Dim SW As System.IO.StreamWriter = myprocess.StandardInput
       Dim comando As String
       Dim cmdir As String
       Dim nombre As String

       For Each file As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchTopLevelOnly, "*.T01")

           nombre = My.Computer.FileSystem.GetName(file)
           cmdir = "cd " & midirectorio
           comando = "runpkr00.exe -d -s " & nombre
           SW.WriteLine(cmdir)
           SW.WriteLine(comando)
           'Results = SR.ReadToEnd
           'SW.Close()
           'SR.Close()
           'Invoke(Finished)
           MessageBox.Show("Conversión a DAT culminada." & vbNewLine & "Data: " & nombre, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
       Next
       Results = SR.ReadToEnd
       SW.Close()
       SR.Close()
       Invoke(Finished)

   End Sub

   Private Sub UpdateText()

       'If Me.InvokeRequired = False Then
       Dim midirectorio As String = TextBox1.Text
       Dim strStreamW As Stream = Nothing
       Dim strStreamWriter As StreamWriter = Nothing
       Dim fecha As String = DateTime.Now.ToString("dd MMM HHmmss")
       Dim rutarchivo As String = String.Concat(midirectorio, "log-", fecha & ".txt")
       Windows.Forms.Cursor.Current = Cursors.WaitCursor
       strStreamW = File.Create(rutarchivo)
       strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)
       strStreamWriter.WriteLine(Results)
       strStreamWriter.Close()
       ' Else
       '  Dim D As delUpdate = New delUpdate(AddressOf UpdateText)
       ' Me.Invoke(D)
       ' End If
   End Sub

   Private Sub btnrinex_Click(sender As System.Object, e As System.EventArgs) Handles btnrinex.Click
       Dim midirectorio As String = TextBox1.Text
       Dim CMD As New Threading.Thread(AddressOf CMDAutomaterin)
       If midirectorio = "" Then
           MessageBox.Show("Debe seleccionar la ruta donde se encuentra la data", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error)
       Else
           My.Computer.FileSystem.CopyFile("C:\Program Files\convert data\teqc.exe", midirectorio & "\teqc.exe", Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing)
       End If
       CMD.Start()
   End Sub


   Friend ReadOnly GPSDictionary As Dictionary(Of Integer, Integer) = Me.GetGPSDictionary
   Private Function GetGPSDictionary() As Dictionary(Of Integer, Integer)

       Dim ThisYear As Integer = Now.Year
       Dim DaysInThisYear As Integer = (From month As Integer In Enumerable.Range(1, 12)
                                        Select DateTime.DaysInMonth(ThisYear, month)).Sum
       Dim GPSWeeks As IEnumerable(Of Integer) = Enumerable.Range(1773 - 1, 1825)
       Dim Result As New Dictionary(Of Integer, Integer)

       For Day As Integer = 1 To DaysInThisYear
           Result.Add(Day, GPSWeeks(DatePart(DateInterval.WeekOfYear,
                                             New DateTime(ThisYear, 1, 1).AddDays(Day - 1))))
       Next Day

       Return Result
   End Function

   Private Sub CMDAutomaterin()
       Dim midirectorio As String = TextBox1.Text
       Dim myprocess As New Process
       Dim StartInfo As New System.Diagnostics.ProcessStartInfo
       StartInfo.FileName = "cmd"
       StartInfo.RedirectStandardInput = True
       StartInfo.RedirectStandardOutput = True
       StartInfo.UseShellExecute = False
       StartInfo.CreateNoWindow = True
       myprocess.StartInfo = StartInfo
       myprocess.Start()
       Dim SR As System.IO.StreamReader = myprocess.StandardOutput
       Dim SW As System.IO.StreamWriter = myprocess.StandardInput
       Dim comandodat As String
       Dim comandorin As String
       Dim cmdir As String
       Dim nombre As String
       Dim renombre As String

       For Each file As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchTopLevelOnly, "*.T01")

           nombre = Path.GetFileNameWithoutExtension(file)
           renombre = Microsoft.VisualBasic.Left(nombre, Len(nombre) - 2) & "0"
           Dim DayOfYear As Integer = Mid(nombre, 5, 3)
           Dim semgps As Integer = Me.GPSDictionary(DayOfYear)

           cmdir = "cd " & midirectorio
           comandodat = "runpkr00.exe -g -d " & nombre & ".t01"
           comandorin = "teqc.exe +nav " & renombre & ".14n -O.int 5 -O.dec 5 -O.ag IGN-PERU -O.o CPG -week " & semgps & " -tr d " & nombre & ".tgd> " & renombre & ".14o"
           SW.WriteLine(cmdir)
           SW.WriteLine(comandodat)
           SW.WriteLine(comandorin)
           'Results = SR.ReadToEnd
           ' SW.Close()
           'SR.Close()
           'Invoke(Finished)
           MessageBox.Show("Conversión a RINEX culminada." & vbNewLine & "Data: " & nombre, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
       Next
       Results = SR.ReadToEnd
       SW.Close()
       SR.Close()
       Invoke(Finished)

   End Sub



   Private Sub btntqc_Click(sender As Object, e As EventArgs) Handles btntqc.Click
       Dim midirectorio As String = TextBox1.Text
       Dim CMD As New Threading.Thread(AddressOf CMDAutomateqc)
       If midirectorio = "" Then
           MessageBox.Show("Debe seleccionar la ruta donde se encuentra la data", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error)
       Else
           My.Computer.FileSystem.CopyFile("C:\Program Files\convert data\teqc.exe", midirectorio & "\teqc.exe", Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing)
       End If
       CMD.Start()
   End Sub

   Private Sub CMDAutomateqc()
       Dim midirectorio As String = TextBox1.Text
       Dim myprocess As New Process
       Dim StartInfo As New System.Diagnostics.ProcessStartInfo
       StartInfo.FileName = "cmd"
       StartInfo.RedirectStandardInput = True
       StartInfo.RedirectStandardOutput = True
       StartInfo.UseShellExecute = False
       StartInfo.CreateNoWindow = True
       myprocess.StartInfo = StartInfo
       myprocess.Start()
       Dim SR As System.IO.StreamReader = myprocess.StandardOutput
       Dim SW As System.IO.StreamWriter = myprocess.StandardInput
       Dim comandorin As String
       Dim cmdir As String
       Dim nombre As String
       Dim renombre As String

       For Each file As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchTopLevelOnly, "*.T01")

           nombre = Path.GetFileNameWithoutExtension(file)
           renombre = Microsoft.VisualBasic.Left(nombre, Len(nombre) - 2) & "0"

           If System.IO.File.Exists(midirectorio & "\" & renombre & ".14n") And System.IO.File.Exists(midirectorio & "\" & renombre & ".14o") Then
               cmdir = "cd " & midirectorio
               comandorin = "teqc.exe -nav " & renombre & ".14n +qc " & renombre & ".14o"
               SW.WriteLine(cmdir)
               SW.WriteLine(comandorin)
               'Results = SR.ReadToEnd
               'SW.Close()
               'SR.Close()
               'Invoke(Finished)
               MessageBox.Show("Quality Check." & vbNewLine & "Data: " & nombre, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
           Else
               MessageBox.Show("Se necesitan de los archivos RINEX (14n y 14o)" & vbNewLine & "Solución: Clic en el Botón RINEX.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
           End If
       Next
       Results = SR.ReadToEnd
       SW.Close()
       SR.Close()
       Invoke(Finished)

   End Sub
#16
Cita de: Eleкtro en 30 Junio 2014, 18:45 PM
es muy facil de adaptar, incluso puedes crear una función de uso genérico para devolver todos los datos necesarios (dias, semanas gps) en un objeto, ejemplo:


Elektro, muchas gracias por apoyarme. Está OK  :D
#17
Cita de: Eleкtro en 28 Junio 2014, 02:54 AM




Está muy bien, ahora trato de adecuar tu codigo a mi aplicacion, ya que el día lo tendria que ingresar en un text ejem: 52 y que me de como resultado la semana ejem: del dia 52 la semana gps es 1780.

Gracias elektro =)
#18
.NET (C#, VB.NET, ASP) / ARREGLOS VISUAL.NET
27 Junio 2014, 23:38 PM
Hola, soy nueva con lo que es el desarrollo pero estoy intentando en que me salga un simulador de semana gps (referencia:  http://gps.geo.upm.es/www/calactal.htm) donde al colocar el día (del 1 al 365) me bote como resultado la semana gps que le corresponde: ejem:  034 corresponde a 1778. El código que generé y el cual no me funciona, es el siguiente:


           
Código (vbnet) [Seleccionar]
Dim semanagps As Integer
            Dim i As Integer = textbox1.text
            Dim numdia(i) As Integer
         
            numdia(0) = Nothing   
            numdia(1) = 1773          'si nos fijamos en el calendario la semana 1773
            numdia(2) = 1773          'tiene del día 1 al 4 y las demás semanas tendrán
            numdia(3) = 1773          'los siete días que comprende la semana, es por
            numdia(4) = 1773          'ello que genero el for.
            For i = 5 To 365 Step 1
                For k = 1773 To 1825 Step 1
                   For j = 1 To 7 Step 1
                       numdia(i) = k + 1
                    Next
                Next
            Next

            semanagps = numdia(i)


De repente mi lógica esta mal, quisiera que me apoyen por favor.

Gracias de antemano.


#19
Cita de: El Benjo en 19 Junio 2014, 05:41 AM
Ok, intenta llamar a la función dentro del mismo hilo para que la aplicación te bote el error y "a la fuerza" se detenga la ejecución. De esta manera podrás ver por qué la segunda vez que se ejecuta "Results = SR.ReadToEnd" No te funciona.

Estoy viendo otra cosa: No veo en ninguna parte del código que declares la variable Results. Puedes por favor poner cómo la declaras, creo que el error puede estar ahí.

Aquí te paso todo el código de mi aplicación pero ahora tengo otro problema y es que al momento de quitarle todos los puntos de interrupción ya no me ejecuta, se queda en My.Computer.FileSystem.CopyFile .
Cuando le quito el código
Código (vbnet) [Seleccionar]
'Results = SR.ReadToEnd
            'SW.Close()
            'SR.Close()
            'Invoke(Finished)

y coloco el punto de interrupción en el for each me corre todo, algo debe de pasar con eso.



Código (vbnet) [Seleccionar]
Imports System
Imports System.IO
Imports System.IO.StreamWriter

Public Class Form1
    Inherits System.Windows.Forms.Form

    Private Results As String
    Private Delegate Sub delUpdate()
    Private Finished As New delUpdate(AddressOf UpdateText)

  Private Sub btnexaminar_Click(sender As Object, e As EventArgs) Handles btnexaminar.Click
        Dim Dir As New FolderBrowserDialog
        If Dir.ShowDialog = Windows.Forms.DialogResult.OK Then
            TextBox1.Text = Dir.SelectedPath
        End If
    End Sub

    Private Sub btndat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndat.Click
        Dim midirectorio As String = TextBox1.Text
        Dim CMDThread As New Threading.Thread(AddressOf CMDAutomate)
        If midirectorio = "" Then
            MessageBox.Show("Debe seleccionar la ruta donde se encuentra la data", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error)
        Else
            My.Computer.FileSystem.CopyFile("C:\Program Files\convert data\runpkr00.exe", midirectorio & "\runpkr00.exe", Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing)
        End If
        CMDThread.Start()

    End Sub

    Private Sub CMDAutomate()
        Dim midirectorio As String = TextBox1.Text
        Dim myprocess As New Process
        Dim StartInfo As New System.Diagnostics.ProcessStartInfo
        StartInfo.FileName = "cmd"
        StartInfo.RedirectStandardInput = True
        StartInfo.RedirectStandardOutput = True
        StartInfo.UseShellExecute = False
        StartInfo.CreateNoWindow = True
        myprocess.StartInfo = StartInfo
        myprocess.Start()
        Dim SR As System.IO.StreamReader = myprocess.StandardOutput
        Dim SW As System.IO.StreamWriter = myprocess.StandardInput
        Dim comando As String
        Dim cmdir As String
        Dim nombre As String

        For Each file As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.T01")

            nombre = My.Computer.FileSystem.GetName(file)
            cmdir = "cd " & midirectorio
            comando = "runpkr00.exe -d -s " & nombre
            SW.WriteLine(cmdir)
            SW.WriteLine(comando)
            'Results = SR.ReadToEnd
            'SW.Close()
            'SR.Close()
            'Invoke(Finished)
        Next
           
        SW.Close()
        SR.Close()

    End Sub

   Private Sub UpdateText()
        Dim midirectorio As String = TextBox1.Text
        Dim strStreamW As Stream = Nothing
        Dim strStreamWriter As StreamWriter = Nothing
        Dim fecha As String = DateTime.Now.ToString("dd MMM HHmmss") & ".txt"
        Windows.Forms.Cursor.Current = Cursors.WaitCursor
        Dim rutarchivo As String = String.Concat(midirectorio, "log-", fecha)
        strStreamW = File.Create(rutarchivo)
        strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)
        strStreamWriter.WriteLine(Results)
        strStreamWriter.Close()
    End Sub
#20
Cita de: El Benjo en 19 Junio 2014, 00:11 AM
Eso significa que se produce el error en esa línea. Me imagino que la función es creada en un hilo independiente del hilo principal, por eso es que no te salta error sólo sale del bucle y de la función... Y YA!

Para comprobar qué tipo de error es coloca el for dentro del tray/catch y coloca el punto de interrupción en la línea correspondiente al cath (como te indiqué en el código anterior) en la variable "e" estará la información correspondiente al error. Dinos cuál es para ver cómo se puede solucionar.

En Results me bota Nothing y como te digo se queda en results y termina. No llega a la parte del Catch.

Código (vbnet) [Seleccionar]
Try
            For Each file As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.T01")

                nombre = My.Computer.FileSystem.GetName(file)
                cmdir = "cd " & midirectorio
                comando = "runpkr00.exe -d -s " & nombre
                SW.WriteLine(cmdir)
                SW.WriteLine(comando)
                Results = SR.ReadToEnd
                'SW.Close()
                'SR.Close()
                Invoke(Finished)
            Next
            Catch e As Exception
        End Try
        SW.Close()
        SR.Close()