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 - Eleкtro

#3711
Por "pantalla" asumo que estás intentando referirte a la consola o shell de Windows, es decir, la CMD.

¿Qué otra cosa esperas que haga un programa al finalizar su ejecución?, cerrarse.

Para evitar un cierre precoz y así poder ver el progreso, puedes iniciar tu programa desde otra instancia de la CMD para que al finalizar su ejecución no se cierre dicha instancia, o bien puedes detener la ejecución de tu aplicación con Console.ReadLine().

Saludos
#3712
En caso de desconocimiento, lo primero que deberías hacer es intentar abrirlos, uno por uno, con el Notepad u editor de texto favorito para determinar si el contenido de los archivos se representa en caracteres legibles, o por lo contrario, en binario, y en caso de ser lo primero pues ya tendrías el problema resuelto, pero en caso de ser lo segundo, entonces probablemente correspondan a algún tipo de formatos personales o incluso privativos, de los que sería dificil averiguar algo con la poca información que has proporcionado, ya que para empezar, la extensión de archivo ".cs" dificultaría la investigación, debido a que entraría en conflicto con la extensión estándar que corresponde a una clase del lenguage de programación C-Sharp (.cs).

El caracter "C" se presenta en la abreviatura de 6 de los 7 archivos de la imagen, probablemente significa algo importante que tiene relación con el programa capaz de leer dichos archivos, o con el algoritmo de codificación/empaquetación de los archivos, eso podría ser el comienzo de una pista para averiguar más.

Sin mucho argumento te voy a decir que, el tipo de formato de nomenclatura y enumeración de los archivos, me hace pensar que se trata de algún tipo de recurso relacionado con el diseño (imágenes, texturas 3D, vectores, etc... vete a saber qué pueden ser con un formato poco popular.)

Suerte.

Saludos
#3713
Cita de: TrashAmbishion en 18 Abril 2016, 05:33 AM
Hola,

Reformulando la respuesta...

Esa línea trabaja bien lo que sucede es que devuelve "true" y entra a

Código (vbnet) [Seleccionar]
Throw New Exception("Any available network interface found.")

Coño, que despiste, tienes razón, en el código de ejemplo evaluo si es igual a True, cuando debería evaluar si es igual a False, para lanzar la excepción.

Ahora entiendo a lo que te refieres, disculpa. Ya está corregido, simplemente hay que añadirle un Not a la condicional:
Citar
Código (vbnet) [Seleccionar]
If Not NetworkTrafficMonitor.GetAvaliableInterfaceNames.Any() Then
               Throw New Exception("Any available network interface found.")

Saludos!
#3714
El keyword void dentro del contexto que has mostrado se usa para definir un método que no devuelve un valor, pero un ctor es en realidad un método que devuelve (de forma abstracta) una referencia a la instancia, por lo que no debes especificar el void.

Código (csharp) [Seleccionar]
using System;

class Prueba {
   private int a, b, c, r;

   public Prueba() {
       this.a = 1;
       this.b = 2;
       this.c = 3;
   }

   public void Suma() {
       this.r = (this.a + this.b + this.c);
       Console.Write(r);
   }

}


EDITO: Ah, y aparte de eso, le pusiste visibilidad privada al ctor, un constructor tiene que ser visible/público si quieres instanciar la class, como ya te mencioné en el otro post (o eso creo que hice).

Saludos
#3715
Cita de: Maria Alejandra en 16 Abril 2016, 22:50 PM1) estoy algo confudida no manejo muy bien ni comprendo los terminos de instanciacion me parecen algo enredado y no lo comprendo muy bien su funcionamiento

que es una instancia expliquenmelo en terminos sencillos porfavor?  

alguien que me pueda explicar esto un poco mas sencillo los terminos que se manejan en internet no los comprendo son algo muy complicado para mi

Intentaré explicártelo de forma distinta a los tecnicismos que hayas leido por Internet, para intentar que te sea más fácil su comprensión...:

Se le suele llamar object (u objeto) a una representación de una estructura de datos encapsulada o una abstracción de algoritmos, que expone su funcionalidad mediante los miembros del lenguaje,
éstos miembros en la plataforma .Net pueden ser: variables (a esto se le suele llamar campos o fields), constantes (o constants), propiedades (o properties), métodos (o methods), funciones (o functions), enumeraciones (o enums), estructuras (o structs), eventos (o events), y un largo etcétera.

Pues bien, habiendo comprendido lo anterior, podemos decir que una instancia es una copia única del objeto, es un punto de referencia que habilita el acceso a los miembros que contenga definidos ese objeto.
Cuando creas una instancia, lo que estás haciendo es crear/asignar un espacio de memoria para consumir ese objeto por un tiempo de vida limitado, hasta que sea destruido/liberado.

También cabe mencionar que...:

  • Tal vez el fallo más común entre los programadores iniciados (por ese motivo te advierto) pueda ser el hecho de intentar utilizar los miembros de un objeto que no ha sido instanciado,
    y al no existir una referencia en memoria de ese objeto, esto causará un error de referencia nula en tiempo de ejecución.
    Para ser más exactos, se trata de una excepción del tipo System.NullReferenceException.




Cita de: Maria Alejandra en 16 Abril 2016, 22:50 PMlos metodos ( creo que se les llama asi)

El término estandarizado a veces simplemente depende de los factores que hacen que se popularice un término para un lenguaje en específico, puedes referirte a un método por otros términos cómo procedimiento (o procedure), subrutina (o sub-routine), rutina (o routine), y unidad (o unit), y toda esta terminología podría llevarte a la confusión, sobre todo el último término mencionado, ya que en realidad sirve para referirse a cualquier unidad de código (es decir, a cualquier linea/instrucción del código fuente por individual), pero... vaya, si, se llaman métodos.

En la plataforma .Net (y por lo general en el resto de lenguajes también), se le denomina 'método' a un bloque de código que ejecuta una serie de instrucciones y finaliza su ejecución sin devolver un tipo de valor.

Ejemplo:
Código (csharp) [Seleccionar]
public void MyMethod() {
int value = 1;
value += 3;
Console.WriteLine(value);
}


Si un método devuelve un tipo de valor, entonces se le denomina 'función'.

Ejemplo:
Código (csharp) [Seleccionar]
public int MyFunction() {
int value = 1;
value += 3;
return value;
}





Cita de: Maria Alejandra en 16 Abril 2016, 22:50 PMPerro Rallo = new Perro();
Rallo  = se convierte en una nueva estancia

En una "estancia" no, pero en una instancia si :P.

Para instanciar una class, debes invocar al constructor (o ctor) de esa class, y para ello se utiliza el operador new (como en el ejemplo que has mostrado con new Perro()):

También cabe mencionar que...:

  • Un constructor es un método, solo que tiene un nombre estándar distinto que describe un propósito en particular.
  • Hay classes/types que son instanciables, y otros que no lo son (ej.: una class que en su firma tenga declarado el modificador abstract).
  • Una class instanciable puede tener más de un constructor definido. A cada constructor adicional se le denomina sobrecarga (u overload), y esto se aplica a cualquier tipo de miembro sobrecargable (ej.: métodos, funciones, y propiedades).
  • Puedes instanciar classes/types utilizando la función System.Activator.CreateInstance(), pero esta metodología se utiliza en circunstancias muy específicas, y generalmente por necesidad, por ejemplo en la ingeniería inversa de ensamblados .Net para instanciar types mediante técnicas por Reflection.




Cita de: Maria Alejandra en 16 Abril 2016, 22:50 PMy es del tipo perro = como del tipo perro ?

El type es Perro, solo que es una nueva instancia de ese type, por lo que la respuesta a esa pregunta es: Sí.
(entendí mal la pregunta)

No se me ocurre muy bien como explicárte que es un Type sin profundizar en más cosas que necesitarían una explicación (cómo interfaces, estructuras, herencia, classes base e implementaciones), así que lo intentaré resumir de forma poco precisa...:
  • Un tipo (o type) es lo que asegura que las funcionalidades de un objeto existan en tiempo de ejecución.

Cualquier class que sea instanciable enfocada a representar cierta funcionalidad se considera un type (entre otro tipo de miembros que se consideran un type),
la class System.Object es un type que representa un objeto, y absolutamente todas las classes de .Net Framework heredan ese base-type (heredar, de forma muy resumida significa aplicarle a una class la funcionalidad definida en otra class, sin tener que volver a redeclarar esa funcionalidad),
otro ejemplo de un type sería la class System.Windows.Forms.Form que representa la funcionalidad y el comportamiento de una ventana de la interfáz gráfica de tu aplicación,
y otro ejemplo sería esta class instanciable de aquí abajo que representa los atributos de un perro:

Código (vbnet) [Seleccionar]
public class Dog {

public string Name { get; set; }
public string Race { get; set; }
public int Age { get; set; }

private Dog() {
}

public Dog(string name, string race, int age) {
this.Name = name;
this.Race = race;
this.Age = age;

this.MyMethod();
}

private void MyMethod() {
// Do something...
}

}


Eso sería considerado el type Dog. No lo veas como el nombre de la class, intenta visualizarlo más bien como la funcionalidad de una class instanciable, es decir, referirnos al type Dog es referirnos a una estructura de datos que implica 3 propiedades y un constructor definido para representar algo en particular.

Quizás te resulte más facil con un ejemplo para evaluar el type:
Código (csharp) [Seleccionar]
Dog dogInstance = new Dog(name: "Rompe-huesos", race: "Bulldog", age: 3);
Type t = dogInstance.GetType();
Console.WriteLine(string.Format("Dog type name     : {0}", t.Name));
Console.WriteLine(string.Format("Dog type full name: {0}", t.FullName));


...O este otro ejemplo:
Código (csharp) [Seleccionar]
Dog dogInstance = new Dog(name: "Rompe-huesos", race: "Bulldog", age: 3);
bool isDogType = (dogInstance is Dog);
Console.WriteLine(string.Format("'dogInstance' object is type of 'Dog'?: {0}", Convert.ToString(isDogType)))


Una class que no se consideraría un type, sería cualquier class no-instanciable de propósito general, como por ejemplo la class System.IO.Path, que se considera un type, sin embargo, una class no-instanciable siempre será considerado del type System.Object, ya que es el base-type principal de la jerarquía de herencias de types de .Net.

Espero haber podido aclararte algunos conceptos. Si te fijas me he puesto algo pesado explicando las terminologías en Inglés entre paréntesis, pero es esencial conocerlas ...antes que sus nombres en Español.

Saludos
#3716
No hay ningún error en lo que comentas, pero creo que existe algo de malentendimiento por tu parte sobre el manejo de colecciones genéricas en general, te explico:

La extensión de LINQ IEnumerable.Any() (en: GetAvailableInterfaceNames().Any()) sirve para evaluar si una colección enumerable está vacía, la extensión Any() devolverá True si está vacía, de lo contrario, False.
¿Qué problema le encuentras?, "no rula" puede significar mil cosas distintas, intenta ser más específico.

El único motivo por el cual la extensión Any() podría dar una excepción, sería al utilizar dicha extensión para evaluar una colección nula (Nothing), pero si observamos el código fuente de mi función, podemos comprobar que en ningun caso se devuelve una colección nula:

Cita de: ElektroKit
Código (vbnet) [Seleccionar]

Public Shared Function GetAvailableInterfaceNames() As IEnumerable(Of String)

   If PerformanceCounterCategory.Exists("Network Interface") Then
       Return New PerformanceCounterCategory("Network Interface").GetInstanceNames()

   Else
       Return Enumerable.Empty(Of String)()

   End If

End Function




Mi función GetAvailableInterfaceNames() devuelve una colección enumerable, por lo que efectivamente, como toda otra colección/Array, tiene un indexer que puedes utilizar para especificar un elemento de la colección (es decir, un nombre de adaptador) según el índice, por ejemplo: Dim adapterName As String = GetAvailableInterfaceNames(2).

La extensión de LINQ IEnumerable.First() devuelve el primer elemento de una colección. Recuerda que el código de ejemplo es eso, un ejemplo que toma la primera interfaz de red encontrada (asumiendo que existe al menos una) con: GetAvailableInterfaceNames().First().

Saludos
#3717
Lekim, me gustaría poder ayudarte pero ese problema no tiene relación con mi librería, es un problema de referencias de las librerías de .Net Framework.

Cómo indica en el warning, estás focalizando hacia la versión compacta (o 'perfil cliente') de los runtimes de .NetFx 4.0, lo que deberías hacer para resolverlo creo que ya lo sabes, debes focalizar a la versión completa en tu proyecto, y para ello debes tener instalada la versión completa de los runtimes, además del paquete de focalización para Visual Studio (Microsoft Multi-Targeting for .NET Framework 4, eso estando en VS2010 claro, en versiones superiores no es necesario), o simplemente podrías intentar descargar/obtener la librería System.web.dll (versión completa) y referenciar manualmente dicha librería en tu proyecto.

De todas formas, respecto a mi librería Elektro.Net.dll, deberías poder ignorar (y ocultar) el warning sin problema alguno, puesto que deberías poder utilizar todos los miembros del namespace Elektro.Net excepto aquellos que referencien miembros de la versión completa de System.Web.dll (que serán apenas 2 o 3 métodos de la clase Elektro.Net.Tools.WebUtil).

Saludos
#3718
@TrashAmbishion

Cita de: TrashAmbishion en 15 Abril 2016, 17:16 PM'Elektro.Net.Types.NetworkTrafficMonitor.Protected Friend Event TrafficChanged(sender As Object, e As Elektro.Net.Types.TrafficChangedEventArgs)' is not accessible in this context because it is 'Protected Friend'.

Has descubierto un bug de diseño. Por algún motivo le cambié la visibilidad al evento (no se por qué lo hice, despues de haberlo testeado y haber escrito el ejemplo que estuviste intentado usar xD).

Si quieres puedes recompilar tu mismo la libería, solo tienes que buscar la clase NetworkTrafficMonitor y modificar la visibilidad del miembro...

de:
Código (vbnet) [Seleccionar]
Protected Friend Event TrafficChanged As EventHandler(Of TrafficChangedEventArgs)

a:
Código (vbnet) [Seleccionar]
Public Event TrafficChanged As EventHandler(Of TrafficChangedEventArgs)

De todas formas, aquí te subo la librería ya corregida y con algunos otros cambios:
(Elektro.Net.dll v1.6 BETA; .NetFx4.0; AnyCPU\Debug)




Y aquí tienes un ejemplo de uso (actualizado):

Código (vbnet) [Seleccionar]
Imports Elektro.Net.Enums
Imports Elektro.Net.Tools
Imports Elektro.Net.Types

Public NotInheritable Class Form1 : Inherits Form

   Friend WithEvents NetMon As NetworkTrafficMonitor

   Private Sub Form1_Shown() Handles MyBase.Shown
       Me.InitializeNetMon()
   End Sub

   Private Sub InitializeNetMon()

       Try
           If Not NetworkTrafficMonitor.GetAvaliableInterfaceNames.Any() Then
               Throw New Exception("Any available network interface found.")

           Else
               Me.NetMon = New NetworkTrafficMonitor(NetworkTrafficMonitor.GetAvaliableInterfaceNames.First())
               Me.NetMon.UpdateBehavior = TrafficMonitorUpdateBehavior.FireAlwaysAfterTick
               Me.NetMon.UpdateInterval = 1000 ' 1 sec
               Me.NetMon.Start()

           End If

       Catch ex As Win32Exception When ex.ErrorCode = -2147467259
           MessageBox.Show("Cannot initialize network monitor. Ensure to enable performance counters service.", "",
                           MessageBoxButtons.OK, MessageBoxIcon.Error)

       Catch ex As Exception
           Throw

       End Try

   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Handles the <see cref="NetworkTrafficMonitor.TrafficChanged"/> event of the NetMon instance.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="sender">
   ''' The source of the event.
   ''' </param>
   '''
   ''' <param name="e">
   ''' The <see cref="TrafficChangedEventArgs"/> instance containing the event data.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   Private Sub NetMon_TrafficChanged(ByVal sender As Object, ByVal e As TrafficChangedEventArgs) _
   Handles NetMon.TrafficChanged

       Me.LabelBytesReceived.Text = String.Format("Bytes received: {0} kb", (e.BytesReceived / 1024).ToString("n2"))
       Me.LabelDlSpeed.Text = String.Format("DL Speed: {0} kb/sec", (e.DiffBytesReceived / 1024).ToString("n2"))

       Me.LabelBytesSent.Text = String.Format("Bytes sent: {0} kb", (e.BytesSent / 1024).ToString("n2"))
       Me.LabelUlSpeed.Text = String.Format("UL Speed: {0} kb/sec", (e.DiffBytesSent / 1024).ToString("n2"))

   End Sub

   Private Sub BtDownloadUrl_Click() Handles BtDownloadUrl.Click

       Dim url As String = "http://download.thinkbroadband.com/10MB.zip"
       Dim client As New WebClient()
       client.DownloadFileAsync(New Uri(url), Path.GetTempFileName())

   End Sub

   Private Sub BtPauseMon_Click() Handles BtPauseMon.Click

       If Me.NetMon.IsActive Then
           Me.NetMon.Stop()
       Else
           Me.NetMon.Start()
       End If

   End Sub

End Class


Saludos
#3719
Cita de: TrashAmbishion en 15 Abril 2016, 15:36 PMPd: En el chm de tu frame no podrias añadirle ejemplos del uso de tus clases, funciones, etc...

Porque en el otro tema lo que buscaba era eso mismo una forma mas compacta de referirme a la clase y aun estoy mirándolo mas a fondo para poder sacarle el máximo, muchas gracias... por hacerlo mas simple..  ;-) ;-) ;-) ;-) ;-)

Hombre... es que eso que te expliqué no tiene relación con mi API, sino con el lenguaje Vb.Net, se llaman Alias:
El uso general de una class/namespace se aprende aprendiendo a usar el lenguaje, no aprendiendo a usar mi API xD :P.

Sobre el CHM, para los métodos, funciones, propiedades, estructuras y demás, si que podrás ver muchos ejemplos definidos, y algunos muy extensos. Digamos que escribí ejemplos para un 30%-40% de los miembros de la API (más o menos), pero si necesitas algún ejemplo en concreto (exista ya un ejemplo en el CHM o no) solo tienes que pedírmelo y con gustó te lo mostraré.

Saludos!
#3720
Perdón, pero me he fijado en que solo pides y pides códigos ya hechos... y la mejor forma de dejar de buscar códigos, es empezar a crearlos por ti mismo. ;D

No me queda claro lo que quieres, si bloquear completamente la hora, es decir, que el reloj no avance ni 1 solo segundo, o solamente quieres bloquear el acceso al cambio de hora.

En caso de ser lo primero, tal vez podrías desarrollar un servicio horario de Internet (Internet time Service o IST) al que sincronizarte, y entonces, mientras la hora de tu servicio no cambie, la sel sistema operativo no lo hará, pero no tengo absolutamente ni idea de cómo va ese tema, me refiero a el/los lenguaje(s) necesario(s), y el funcionamiento del protocolo DayTime, y realmente tampoco se si solo el gobierno puede proveer dichos servicios horarios, o el usuario final puede suscribirse a uno cualquiera (que tu hallas desarrollado y lo tengas online).

La opción más sencilla y chapuzera sería simplemente almacenar la hora actual (en la que el usuarió demandó el bloqueo de la hora), entonces "resetear" la hora cada 100 ms o así (para no permitir que avance 1 segundo), y restaurar la hora en cada inicio de sesión del usuario. Esto implica que debas almacenar la hora bloqueada en una clave de registro (para poder recordarla en cada inicio, para un servicio también necesitarías hacerlo), o en un archivo donde serializar los datos, puedes hacerlo como prefieras, es una opción muy fácil.

En caso de querer hacer lo segundo, es decir, prohibirle al usuario el acceso al cambio de hora, según he leido es tan simple cómo establecer la prohibición mediante las políticas de grupo (GPO), así que solo tienes que informarte de cómo hacerlo (supuestamente: Local Computer Policy > Computer Configuration > Windows Settings > Security Settings > User Rights Assignment > Change the system time), monitorizar la clave de registro que se creará, ya que siempre se crea una clave cuando se establece una prohibición, y entonces ya puedes replicar ese valor de registro desde .Net sin necesidad de usar las políticas de grupo. En resumen, que tu app solamente tendría que añadir un valor de registro para restringir el acceso al cambio horario, pero yo no se cual clave ni política de restricción, por que tengo capado el administrador de políticas de grupo en mi Windows, lo siento.

Saludos