| |
|
5251
|
Programación / .NET (C#, VB.NET, ASP) / Re: Obtener porcentaje de descarga desde un módulo
|
en: 2 Julio 2015, 08:53 am
|
Cómo ya te digo, habría que ver el resto del código, por que las modificaciones que comentas en mi caso me funcionan correctamente, el label se actualiza correctamente. De todas formas que estés utilizando un módulo para operaciones asíncronas, objetos disposables, y eventos, no me convence en absoluto, no debería causarte problemas, pero tampoco hay necesidad de que los miembros definidos en ese modulo sean compartidos con el resto de classes, por ese motivo yo usaría una Class instanciable y liberaría los objetos cuando sea necesario. Aparte de eso, en otras circunstancias te diría que utilizases un BackgroundWorker, pero en este caso considero que sería practicamente el mismo resultado. Prueba esto, si no te funciona entonces no sé que decirte a menos que muestres tu código completo para buscar un posible problema que en el código que has mostrado hasta ahora no aparece o no lo puedo detectar. Así es más o menos cómo yo encapsularía esos datos: #Region " Imports " Imports System Imports System.ComponentModel Imports System.IO Imports System.Linq Imports System.Net Imports System.Windows.Forms Imports System.Threading.Tasks #End Region Public NotInheritable Class FileDownloader : Implements IDisposable #Region " Disposable Members " Private WithEvents wc As WebClient #End Region #Region " Properties " Public ReadOnly Property IsBusy As Boolean Get If Me.wc IsNot Nothing Then Return Me.wc.IsBusy Else Return False End If End Get End Property #End Region #Region " Events " Public Event DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Public Event DownloadCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs) #End Region #Region " Event-Handlers " Private Sub WC_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) _ Handles wc.DownloadProgressChanged If (Me.DownloadProgressChangedEvent IsNot Nothing) AndAlso (e.ProgressPercentage <> 100) Then RaiseEvent DownloadProgressChanged(sender, e) End If End Sub Private Sub WC_DownloadFileCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs) _ Handles wc.DownloadFileCompleted If (Me.DownloadCompletedEvent IsNot Nothing) Then RaiseEvent DownloadCompleted(sender, e) End If End Sub #End Region #Region " Public Methods " Public Sub DownloadAsync(ByVal url As String, Optional ByVal targetFilepath As String = "") If String.IsNullOrWhiteSpace(url) Then Throw New ArgumentNullException(paramName:="url") Else If (Me.wc IsNot Nothing) AndAlso (Me.wc.IsBusy) Then Throw New Exception(message:="Another download is in progress.") Else Me.wc = New WebClient With { .UseDefaultCredentials = True } If String.IsNullOrWhiteSpace(targetFilepath) Then targetFilepath = Path.GetFileName(url) End If Task.Factory.StartNew(Sub() wc.DownloadFileAsync(New Uri(url), targetFilepath)) End If End If End Sub ''' <summary> ''' Cancels the current asynchronous download. ''' </summary> Public Sub Cancel() If Me.wc Is Nothing Then Throw New NullReferenceException(message:="", innerException:=New ObjectDisposedException(objectName:="wc")) ElseIf Me.wc.IsBusy Then Me.wc.CancelAsync() End If End Sub #End Region #Region "IDisposable Support" ''' ---------------------------------------------------------------------------------------------------- ''' <summary> ''' To detect redundant calls when disposing. ''' </summary> ''' ---------------------------------------------------------------------------------------------------- Private isDisposed As Boolean = False ''' ---------------------------------------------------------------------------------------------------- ''' <summary> ''' Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. ''' </summary> ''' ---------------------------------------------------------------------------------------------------- Public Sub Dispose() Implements IDisposable.Dispose Me.Dispose(isDisposing:=True) GC.SuppressFinalize(obj:=Me) End Sub ''' ---------------------------------------------------------------------------------------------------- ''' <summary> ''' Releases unmanaged and - optionally - managed resources. ''' </summary> ''' ---------------------------------------------------------------------------------------------------- ''' <param name="isDisposing"> ''' <c>True</c> to release both managed and unmanaged resources; ''' <c>False</c> to release only unmanaged resources. ''' </param> ''' ---------------------------------------------------------------------------------------------------- Protected Sub Dispose(ByVal isDisposing As Boolean) If Not Me.isDisposed Then If isDisposing Then If Me.wc IsNot Nothing Then Me.wc.Dispose() End If End If End If Me.isDisposed = True End Sub #End Region End Class
Y el uso que le daría ...más o menos también: Imports System.ComponentModel Imports System.Threading.Tasks Public NotInheritable Class Form1 : Inherits Form Dim WithEvents downloader As New FileDownloader Private Sub Test() Handles MyBase.Shown Me.downloader.DownloadAsync("http://download.thinkbroadband.com/10MB.zip") End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click If Me.downloader.IsBusy Then Me.downloader.Cancel() End If End Sub Private Sub Downloader_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) _ Handles downloader.DownloadProgressChanged Dim progress As Double = (e.BytesReceived / e.TotalBytesToReceive) * 100.0R If Me.Label1.InvokeRequired Then Me.Label1.Invoke(Sub() Me.Label1.Text = progress.ToString(format:="00.00 \%")) Else Me.Label1.Text = progress.ToString(format:="00.00 \%") End If End Sub Private Sub Downloader_DownloadCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs) _ Handles downloader.DownloadCompleted If e.Cancelled Then Exit Sub End If If Me.Label1.InvokeRequired Then Me.Label1.Invoke(Sub() Me.Label1.Text = 100.0R.ToString(format:="00.00 \%")) Else Me.Label1.Text = 100.0R.ToString(format:="00.00 \%") End If End Sub End Class
Saludos.
|
|
|
|
|
5252
|
Programación / .NET (C#, VB.NET, ASP) / Re: Obtener tipo de red con vb.net
|
en: 2 Julio 2015, 07:06 am
|
Tal vez puedas utilizar los miembros del namespace System.Net.NetworkInformation para ese propósito. Con el método NetworkInterface.GetAllNetworkInterfaces enumeras los adaptadores de red, y con la propiedad NetworkInterface.NetworkInterfaceType determinas el tipo de red, cuyo valor será uno de la siguiente enumeración: ➢ NetworkInterfaceType Enumeration - MSDNCon otros miembros puedes determinar si la red está operativa, y muchas cosas más. Saludos
|
|
|
|
|
5253
|
Programación / .NET (C#, VB.NET, ASP) / Re: Obtener porcentaje de descarga desde un módulo
|
en: 1 Julio 2015, 19:56 pm
|
Habría que analizar lo que haces con el Control de tipo Label, por que el código que has mostrado funciona. De todas formas lo he simplificado (un poco) y he corregido varios conflictos de convención o estándares de VB.Net en los nombres que le diste a los miembros del código. Esto te debería funcionar. Adapta el código a tus necesidades. DownLoadAsynchronously("http://download.thinkbroadband.com/5MB.zip")
Module ModDownloadUrl Private WithEvents wc As WebClient Private Sub WC_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) _ Handles wc.DownloadProgressChanged If Not e.ProgressPercentage = 100 Then Trace.WriteLine(String.Format("Progress: {0}", ((e.BytesReceived / e.TotalBytesToReceive) * 100.0R).ToString(format:="00.00 \%"))) End If End Sub Private Sub WC_DownloadFileCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs) _ Handles wc.DownloadFileCompleted wc.Dispose() Trace.WriteLine(String.Format("Progress: {0}", 100.0R.ToString(format:="00.00 \%"))) MessageBox.Show("Download Complete.", "", MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Public Sub DownLoadAsynchronously(ByVal url As String, Optional ByVal targetFilepath As String = "", Optional ByVal ctrl As Control = Nothing) If String.IsNullOrWhiteSpace(targetFilepath) Then targetFilepath = Path.GetFileName(url) End If wc = New WebClient wc.DownloadFileAsync(New Uri(url), targetFilepath) End Sub End Module
Saludos
|
|
|
|
|
5254
|
Programación / .NET (C#, VB.NET, ASP) / Re: Necesito ayuda con este error!!! en C#
|
en: 1 Julio 2015, 19:24 pm
|
" CommandType " no existe en el contexto actual.... Necesito saber a que se debe esto! Ese tipo de error se debe a que no se puede localizar ningún miembro con el nombre ' CommandType', en algunos casos suele ser por un error de escritura, y en otros casos cómo este por que falta el namespace donde se encuentra dicho miembro. Escribe el namespace completo: cmd.CommandType = System.Data.CommandType.StoredProcedure;
O importa el namespace con la directiva using. using System.Data;
Así te debería funcionar. Saludos
|
|
|
|
|
5255
|
Programación / .NET (C#, VB.NET, ASP) / Re: Como hacer esto en c#¿
|
en: 1 Julio 2015, 14:39 pm
|
Trata de publicar tu código la próxima vez para poder corregirte los errores que hayas tenido, piensa que aprender de tus errores te serviría de más ayuda.
Una manera de hacerlo sería suscribirte al evento RichTextBox.TextChanged para actualizar el TextBox especificado cuando este evento se dispare, reflejando así las modificaciones realizadas en la linea 0 del RichTextBox, recurriendo a la propiedad RichTextBox.Lines, la cual es una colección de strings que contiene las lineas de texto del RichTextBox. Ejemplo en Vb.Net: Private Sub RichTextBox1_TextChanged(ByVal sender As Object, ByVal e As EventArgs) _ Handles RichTextBox1.TextChanged Me.TextBox1.Text = DirectCast(sender, RichTextBox).Lines.FirstOrDefault End Sub
C#: private void RichTextBox1_TextChanged(object sender, EventArgs e) { this.TextBox1.Text = ((RichTextBox)sender).Lines.FirstOrDefault; }
Si prefieres utilizar un botón para actualizar arbitrariamente el texto del TextBox, entonces solo tienes que hacer pequeñisimos cambios en el código que te acabo de mostrar para adaptarlo a ese tipo de comportamiento que mencionas, vamos, con esto quiero decir que creo que serás capaz de hacerlo tu solo sin ayuda xD  . Saludos
|
|
|
|
|
5257
|
Foros Generales / Foro Libre / Re: ¿podría internet funcionar así?
|
en: 1 Julio 2015, 14:31 pm
|
|
...
Por favor, no empieces con los típicos posts chorra y trolls.
El contenido de un post debe tener un mínimo de sentido, un propósito general, un argumento justificable, esto ya te lo comentó un compañero moderador en otra de tus "preguntas" de otra de las cuentas de usuario que tienes registradas en el foro, pero todo lo que publicas parece carecer de sentido.
Muevo el tema a un lugar más acorde, a falta de un subforo dedicado a divagaciones y cosas sin sentido en general...
Saludos!
|
|
|
|
|
5258
|
Foros Generales / Sugerencias y dudas sobre el Foro / Re: [Reclamo] Posible virus y el autor sólo responde en forma negativa.
|
en: 30 Junio 2015, 15:14 pm
|
2) En este caso ya que es una aplicación con interface botones y demás controles, no es posible saber con exactitud con simpemente ejecutar y esperar, se debe ejecutar todas las funcionabilidades que tenga la aplicación al usar los controles. En el caso del Loader que mencione en el punto 1, tambien es posible enviar mensajes a los controles de la aplicación desde el Loader para ejecutar las funcionabilidades, enviar todos los mensajes posibles incluso algunos como WM_MOUSEMOVE que podría ser usado para detectar si realmente está siendo usada por un usuario o manipulada por algun otro programa, hay muchisimos mensajes.
4) Las aplicaciones puede tener funciones que se ejecutarán en un futuro, algunos les llaman bombas logicas: por ahora no muestran ningun comportamiento extraño pero luego quien sabe.
5) La única manera de saber con exactitud todas las acciones de una aplicación es teniendo el código fuente o haciendo un analisis muy extenso usando tecnologia avanzada para analisis como un Hipervisor, estoy actualmente terminando uno espero tenerlo en unos meses. Totalmente de acuerdo, bueno, creo que es algo que resulta obvio para cualquiera, aunque de todas formas en la V.M probé casi todas las características de la app (todos los botones, haciendo escaneos y modificando opciones), pero tal vez no debí decir " Está totalmente limpio" ya que cómo tu has comentado, solamente observando ese código fuente que nunca se llegó a compartir podriamos salir de dudas sobre si realmente está infectado o no... ya que el autor del programa podría ejecutar un código malicioso al cumplirse "X" condición en la aplicación, quien sabe lo que realmente hará... A mi sinceramente me da igual la reputación que una persona tenga si esa persona hace las cosas de esta manera tan... (prefiero no decir nada más), pero es que me mosqueo, estás cosas me mosquean mucho de verdad, por que, para mi, publicar programas gratuitos sin compartir el código fuente no es nada respetable, en absoluto, solo genera negatividad y más cuando se trata de un programa de esta temática.
3) Servicios de Sandbox como Anubis son extremadamente faciles de detectar, solo en el caso de Anubis es posible detectarlo por medio de información del hardware, procesos, modulos o una combinación de ellos, este punto incluye programas como Process monitor ( Por medio de nombre de clases de ventana, controles, etc ) de esta manera es posible que al detectar este tipo de herramientas un programa puede ocultar sus acciones maliciosas y no mostrar algún comportamiento extraño. Cabe mencionar que además es facilísimo encontrar snippets de diversos anti-sandboxes para muchos lenguajes de programación, esto quiere decir que si el autor del programa quisiera entonces no tendría más que googlear un poco y hacer un copy/paste (o desarrollarlo por si mismo) para añadirle ese tipo de protección o evasión de detección, pero que le vamos a hacer... De todas formas, también cabe mencionar que generalmente un código anti-sandbox (o packers con características anti-sandbox) se utilizan directamente para denegar la ejecución de la aplicación (para que no corra la app en una V.M), no se suele utilizar arbitrariamente "en mitad de la aplicación", pero bien podría ser, ya que dependería de las intenciones del autor.
Me parece genial la información que has aportado para dar a conocer varios detalles importantes a los usuarios, y así hacer saber también que mi análisis no es del todo fiel, probablemente ningún análisis de nadie sería concluyente al 100%, estas cosas nunca parecen serlo. PD: Y que no hayas sido ofensivo, se agradece todavía más si cabe. Sin sarcasmo. Saludos!
|
|
|
|
|
5260
|
Foros Generales / Sugerencias y dudas sobre el Foro / Re: [Reclamo] Posible virus y el autor sólo responde en forma negativa.
|
en: 30 Junio 2015, 03:49 am
|
El programa de RDG Malware Detector parece estar limpio. El siguiente análisis fue llevado a cabo en una máquina virtual con Windows 7 x64, con las siguientes herramientas: - RegShot 2 (Unicode Mod)
- Moo0 File Monitor
- Process Monitor (Sys Internals)
+ - Anubis
· Registry Monitor (claves modificadas): Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\CryptSvc] "Start"=dword:00000003 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\CryptSvc] "Start"=dword:00000003 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\VSS\Diag\System Writer]
Simplemente se modifica el tipo de inicio del servicio criptográfico de Windows.
· File Monitor (archivos expandidos): C:\Users\Administrador\AppData\Local\Temp\~DF71D986AEB8DF30B4.tmp Es un archivo temporal binario con nombre único (es decir, variante cada vez que se inicie la aplicación) ccon un tamaño de 64 kilobytes.
· API Monitor: Todo me parece normal. http://pastebin.com/6JpNM8ea(prio32.dll, prio.ini, tienen que ver con una aplicación que tengo instalada para priorizar ciertos parámetros de las aplicaciones) Faltaría un análisis más avanzado y elaborado sobre esto, un API Spy con otras herramientas que tengo pero me llevaría más tiempo y dedicación.
· Análisis exhaustivo de Anubis: Empaqueté el programa en un SFX por que de lo contrario el análisis iba a ser en vano al requerir muchos archivos adicionales que no podía subir al mismo tiempo. Reporte: https://anubis.iseclab.org/?action=result&task_id=1ec19b2f51ea76e948124f41380f4c625El análisis de procesos activos y conexiones establecidas, es decir, cero y cero, están ahí. Saludos!
|
|
|
|
|
|
| |
|