Concurrencia C#

etSq-1La Concurrencia permite que distintos objetos actúen al mismo tiempo, usando diferentes hilos de control (un solo proceso).

Es decir: Es la propiedad que diferencia a los objetos entre estar activos o no.

Esta la usamos  cuando tenemos que manejar varias acciones diferentes al mismo tiempo, para ello  utilizamos procesos los cuales producen acciones dinámicas independientes dentro de un sistema.

Sabemos hay sistemas los cuales ejecutan en múltiples CPU permitiendo así hilos de control verdaderamente concurrentes, mientras que en los sistemas que ejecutan en un solo CPU sólo se puede conseguir una ilusión de hilos concurrentes de control, normalmente mediante algún algoritmo de tiempo compartido.

 

La mayoría de las veces al diseñar o crear una aplicación en lo último en que se solemos pensar es en si debe o no emplear múltiples hilos para su ejecución; ya que cuando se nos enseña un lenguaje de programación lo que se suele hacer es programar todo dentro del mismo programa principal (el famoso Main( )) sin preocuparnos por nada más !!! :p .

Con el Hardware moderno se debe explotar al máximo las características que este nos ofrece y para ello son las aplicaciones las que se deben encargar de exprimir esos recursos.

¿porqué  utilizar Hilos para ello?

Pues la idea es simple un, Hilo es una especie de proceso muy pequeñito que se va a encargar de ejecutar un mismo trozo de código cada vez que se le diga por tanto consume muy poca memoria RAM y forma parte de un proceso más grande que lo conocemos como programa principal. Básicamente la idea es que el Hilo le ayude al programa principal a hacer su trabajo; por tanto el programa principal debe delegar algunas actividades para que estas sean realizadas por el Hilo.

Explicación:

BackgroundWorker es una clase de ayuda en el espacio de nombres System.ComponentModel para la gestión de un subproceso de trabajo.  Proporciona las siguientes características:

Un modelo de cancelación de cooperación
La capacidad de actualizar de forma segura WPF o controles de Windows Forms cuando el trabajador se completa
Reenvío de excepciones al evento de finalización
Un protocolo para informar sobre el progreso
Una implementación de IComponent lo que le permite estar situado en el diseñador de Visual Studio

Ejemplo:

Explicacion:

  • Establecer la propiedad WorkerReportsProgress true.
  • Periódicamente llamar ReportProgress desde dentro del controlador de eventos DoWork con un valor de “porcentaje completado”, y, opcionalmente, un objeto de estado del usuario.
  • Controlar el evento ProgressChanged, consultar la propiedad ProgressPercentage de su argumento evento.
  • Código en el controlador de eventos ProgressChanged es libre para interactuar con los controles de IU al igual que con RunWorkerCompleted. Esto es por lo general en el que se actualizará una barra de progreso.

Para añadir soporte para la cancelación:

  • Establecer la propiedad WorkerSupportsCancellation true.
  • Compruebe periódicamente la propiedad CancellationPending desde dentro del controlador de eventos DoWork. Si es verdad, ajuste del argumento de evento Cancelar propiedad en true, y volver.
  •  Llamar CancelAsync para solicitar la cancelación.
using System;
using System.Threading;
using System.ComponentModel;

namespace ConsoleApplication1
{
    class Program
    {

        static BackgroundWorker _bw;

        static void Main()
        {
            _bw = new BackgroundWorker
            {
                WorkerReportsProgress = true,
                WorkerSupportsCancellation = true
            };
            _bw.DoWork += bw_DoWork;
            _bw.ProgressChanged += bw_ProgressChanged;
            _bw.RunWorkerCompleted += bw_RunWorkerCompleted;

            _bw.RunWorkerAsync("Hola Programador");

            Console.WriteLine("Presiona enter en los proximo 5 segundos para  cancelar");
            Console.ReadLine();
            if (_bw.IsBusy) _bw.CancelAsync();
            Console.ReadLine();
        }

        static void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i <= 100; i += 20)
            {
                if (_bw.CancellationPending) { e.Cancel = true; return; }
                _bw.ReportProgress(i);
                Thread.Sleep(1000);      // Solo por demo...no ira a dormir
            }                         

            e.Result = 123;    //  RunWorkerCompleto
        }

        static void bw_RunWorkerCompleted(object sender,
                                           RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
                Console.WriteLine("Has  cancelado!");
            else if (e.Error != null)
                Console.WriteLine("Error: " + e.Error.ToString());
            else
                Console.WriteLine("Completo: " + e.Result);      // desde DoWork
        }

        static void bw_ProgressChanged(object sender,
                                        ProgressChangedEventArgs e)
        {
            Console.WriteLine("Cargado " + e.ProgressPercentage + "%");
        }
    }
}

El código fuente está disponible en GITHUB clic aquí para descargarlo descarguen la carpeta Concurrencia.

Esto es todo por el momento alguna duda, comentario o sugerencia no duden en escribirme.

 

COMPILAR C# DESDE CONSOLA, SIN VISUAL STUDIO

etSq-1Hace dos días conversaba con un compañero de la universidad y me comentada que Node.js era lo maximo porque se hacia todo desde  la consola ! , a lo que le conteste, alto ahí macho que con C# puedes compilar desde la CMD !!!! equivalente a la terminal en sistemas basados en Linux.

El colega se sorprendió bastante con mi afirmación, llegando a negar lo que le comentaba. Así que saque mi portátil y le hice una pequeña demostración de que si era posible, le explique lo siguiente:

Se a creado la mítica general de que  otros lenguajes, como Bash, Python o Java, son los   adecuados para la realización de pequeños script para automatización de tareas. En comparación, la opinión generalizada sobre .NET es que requiere un IDE sofisticado y pesado como Visual Studio para desarrollar. Todo esto no podría estar más alejado de la realidad. Si bien contar con un IDE simplifica el trabajo, lo cierto es que cualquier sistema Windows con capacidad de ejecutar .NET dispone de forma nativa las herramientas necesarias para compilar programas.

En esta entrada vamos a realizar una pequeña aplicación .NET mediante un simple editor de texto en este caso Bloc de notas, y compilar C# desde consola sin necesidad de ningún programa adicional como VS o VS Code.

Codigo C#

El primer paso abrimos un archivo vacio con cualquier editor de texto yo use Bloc de notas, y copiamos el siguiente código

class hola
{
   public static void Main()

     {

    System.Console.WriteLine("Hola Programador");


   }
   

}

Guardamos el archivo como hola.cs en cualquier ubicación, por ejemplo en el escritorio en la carpeta test.

 

COMPILAR Y EJECUTAR.

Para compilar es necesario buscar cuál es la última versión del compilador instalada en nuestro ordenador. Para ello buscamos a C:\Windows\Microsoft.NET y buscamos la versión más actual disponible. En mi caso es C:\Windows\Microsoft.NET\Framework64\v4.0.30319\

Ahora abrimos una consola de comandos, mediante ejecutar (tecla Windows + R) y escribiendo CMD, y posteriormente pulsando Enter.

en la Consola nos desplazamos hasta la carpeta donde hayamos guardado hola.cs y compilamos mediante el siguiente comando:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe hola.cs

Este comando crea un ejecutable con el mismo nombre de la clase y extensión .exe. Para ejecutarlo simplemente escribimos en la Consola:

hola.exe

El programa se ejecutara y nos mostrara de salida “Hola Programador”

La salia seria similar a esta

ice_screenshot_20160712-221807

Si se estan preguntando pero que carajos es el CSC.EXE

La tarea y archivo csc.exe es el compilador de línea de comandos para Microsoft C# y es instalado con el .NET SDK.

Suele iniciarse junto con Windows bajo el nombre de csc y el comando o archivo csc.exe.

Ojo: si queremos compilar si escribir las ruta de nuestro compilador debemos configurar las variables de entorno , pero este tema los trataremos mas adelante.

aqui les dejo un video de como hacerlo:

Esto es todo por el momento cualquier duda, comentario o sugerencia no duden en escribirme.

 

Máximo y Mínimo elemento de una Matriz

etSq-1Para los que hemos estudiado en la universidad o en algún instituto nos hemos encontrado con una famosa hoja práctica de ejercicios y entre los ejercicios hemos encontrado el sensual Determina el Máximo y Mínimo elemento de una Matriz, hahaha en ese momento apelamos a nuestra defensa pero si este profe no nos ha enseñado nada !!!

En esta entrada aprenderemos a determinar el Máximo y Mínimo elemento de una Matriz C#.

Conceptos nuevos que verán en este código si están en este nivel:

Console.BackgroundColor: Esta propiedad cambia el color de fondo de la consola.

Console.ForegroundColor:  Esta propiedad cambia el color de las letras de la consola.

Dicho esto, Manos al Código !! 🙂   El código fuente está disponible en GITHUB clic aquí para descargarlo descarguen la carpeta maximoMatriz 🙂

Creamos un proyecto Console aplication.

Aqui esta el codigo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace maximoMatriz
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.DarkGreen;
            Console.ForegroundColor = ConsoleColor.White;
            int n, m;
            int mayor, menor;

            Console.WriteLine("VISITE WWW.YMATIAS.COM");
            Console.WriteLine( "NUMEROS MAYOR Y MENOR DE UNA MATRIZ");
            Console.WriteLine("INDIQUE EL NUMERO DE FILAS");
            n = int.Parse(Console.ReadLine());
            Console.WriteLine("INDIQUE EL NUMERO DE COLUMNAS");
            m = int.Parse(Console.ReadLine());
            int[,] a = new int[n, m];

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    Console.Clear();
                    Console.WriteLine("INGRESA EL ELEMENTO[" +i + ","+j +"]");
                    a[i, j] = int.Parse(Console.ReadLine());

                }
            }
            Console.Clear();
            Console.WriteLine("Los elementos que conforman la matriz son:");
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("  ");
                for (int j = 0; j < m; j++)
                {
                    Console.Write("  "+a[i, j]);
                }
            }
            Console.WriteLine(" ");
            mayor = menor = a[0, 0];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (a[i, j] < menor)
                    {
                        menor = a[i, j];
                    }
                    else
                        if (a[i, j] > mayor)
                    {
                        mayor = a[i, j];
                    }
                }
            }
            Console.WriteLine("MAXIMO elemento de la Matriz:" +mayor);
            Console.WriteLine("MINIMO elemento de la Matriz:" + menor);
            Console.ReadLine();
        }
    }
}

El código fuente está disponible en GITHUB clic aquí para descargarlo descarguen la carpeta maximoMatriz 🙂

Esto es todo por el momento alguna duda, comentario o sugerencia no duden en escribirme.

 

¿Conoces Visual Studio Dev Essentials?

Visual Studio Dev Essentials

Obtenga todo lo que necesita para construir y desplegar sus aplicaciones en cualquier plataforma. Con las mejores herramientas del momento, el poder de la nube, formación y soporte, es el programa de Microsoft más completo y FREE.

Encontraras todo lo que necesitas:

Todas las herramientas.

Herramientas para desarrollar para cualquier plataforma – de forma gratuita. Las herramientas incluyen editores  extensibles, entorno de desarrollo y de código integrados para Mac OS X, Linux y Windows.

  • Visual Studio Community
  • Visual Studio Code
  • Team Foundation Server Express

Conjunto completo de servicios en la nube.

El acceso a los servicios en la nube, tales como computación y almacenamiento, servicios de back-end para sus teléfonos o aplicaciones web, servicios para la IoT, aprendizaje automático (machine learning), y la analítica.

  • crédito de Azure ($ 25 / mes durante 12 meses) *
  • Visual Studio Team Services, cuenta para cinco usuarios *
  • App Service gratis.
  • HockeyApp gratis.
  • Insights de nivel de aplicación gratis.

Descarga de Programas y Trials

Obtén el libre acceso a los trials y descargas de software, hacen que sea fácil  desarrollar para múltiples plataformas.

  • SQL Server 2014 Developer Edition.
  • Parallels Desktop ® para Mac Pro Edition (suscripción de 3 meses) *
  • Parallels® Acceso (suscripción de 3 meses) *
  • Plataforma Windows VM (60 días).
  • Aplicaciones de Office Online.

 

Entrenamiento de clase mundial y apoyo.

El libre acceso a la formación técnica de los líderes de la industria tales como Pluralsight, Wintellect, y Xamarin y apoyo prioritario en los foros de MSDN.

  • Pluralsight (suscripción de 3 meses)
  • Cursos de la Universidad Xamarin seleccionados a la carta *
  • WintellectNOW (suscripción de 3 meses) *
  • Microsoft Virtual Academy.
  • HackHands Ayuda de programación en vivo ($ 25 de crédito) *

 

Accede al enlace aquí y aprovecha esta membresía gratuita que te brinda herramientas de desarrollo, capacitación y acceso a expertos de gran experiencia para que resuelvas tus dudas y conozcas aún más de las tecnologías que Microsoft ha desarrollado para ti.

No hay excusas!!

Fuente|Microsoft

MessageBox mostrar variables, iconos, botones

etSq-1Si queremos dar un buen look y una buena interacción con los usuarios debemos implementar formas de interactuar con el usuario en .net esto lo logramos mediante  MessageBox.

Estos pueden contener información importante para el usuario por ejemplo, advertencias, notificaciones,  resultados de operaciones, etc. Se les puede definir tanto botones como iconos.

En esta entrada aprenderemos a crear un MessageBox con C#, los nuevos conceptos que manejaremos son:

MessageBox :Muestra una ventana de mensaje, también conocida como cuadro de diálogo, que presenta un mensaje al usuario.Es una ventana modal que bloquea otras acciones en la aplicación hasta que el usuario la cierra. Un MessageBox puede contener texto, botones y símbolos que informan e dan instrucciones al usuario.

Namespace:   System.Windows.Forms

Dicho esto, Manos al Código !! 🙂   El código fuente está disponible en GITHUB clic aquí para descargarlo descarguen la carpeta MessageBox 🙂

Creamos un proyecto windows forms, y agregamos 5 botones, 2 TextBox y 1 label.

Aquí esta el código:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MessageBox01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void bntNormal_Click(object sender, EventArgs e)
        {
            //muestra un mensaje normal
            MessageBox.Show("Hola Programador");
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Muestra un mensaje con título
            MessageBox.Show("Hola Programador", "Aqui titulo del mensaje");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //Muestra un mensaje con mas botones ademas que el OK (aceptar)
            MessageBox.Show("Hola Programador", "Aqui titulo del mensaje",MessageBoxButtons.YesNoCancel);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //Mostrar un mensaje con ícono
            MessageBox.Show("Hola Programador", "Aqui titulo del mensaje", MessageBoxButtons.YesNoCancel,MessageBoxIcon.Exclamation);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //aqui mostramos variables en el MessageBox
            //declaramos una variable entera para el valor 2
            //y asignamos su valor convirtiendo a entero
           
            int numero2 = Convert.ToInt32(txt_num2.Text);
            //se declara una variable entera para la suma y se realiza la misma
            int suma = Convert.ToInt32(txt_num1.Text) + numero2;
            //Mostrar el resultado de la suma
            MessageBox.Show("La suma de "+ Convert.ToInt32(txt_num1.Text) + " + " + numero2 + " es: " + suma + "", "Resultado de la suma", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

El código esta todo comentado ( lo mas relevante).

El resultado sería similar a este:

message

El código fuente está disponible en GITHUB clic aquí para descargarlo descarguen la carpeta MessageBox 🙂

Esto es todo por el momento alguna duda, comentario o sugerencia no duden en escribirme.

Visual Studio 15

New Visual Studio Installer

Para todos nosotros que hemos estado esperando la  próxima versión de Visual Studio  (con nombre en código Visual Studio “15” ), sabremos que uno de los  grandes temas de lanzamiento del productos es la instalación y la actualización. Microsoft y su equipo a  reestructurado la instalación para hacerla  más pequeña de forma predeterminada, más rápida y más fiable y más fácil de manejar.

En el  // Build de este año, vimos el primer avance experimental de la nueva experiencia de la instalación, con el más pequeño “núcleo editor de” carga útil para Visual Studio con un peso de aproximadamente 320 MB en el disco.

La experiencia de instalación

La configuración es probablemente la única experiencia que cada uno de nosotros como usuarios de Visual Studio compartimos, Microsoft esta interesado en tu opinión antes de lanzar una versión final por lo que a habilitado una encuesta puedes llenarla aquí.

Elija su Stack, Obtenga un instalador

Otra cosa interesante que están haciendo es segmentando las “cargas de trabajo” ya que en versiones anteriores teníamos todo instalado aun no fuésemos a trabajar con ellas. Las versiones recientes de  Visual Studio siempre han tenido una opción de configuración avanzada donde se puede instalar características a un nivel muy granular, y en Visual Studio “15”  nos   daran aún más control del que tiene en la actualidad VS.

Han estado haciendo investigaciones sobre lo que debe ser el derecho de cobro de las cargas de trabajo (es decir sobre lo que queremos tener instalado o no), y han llegado al siguiente concluso:

  • El desarrollo de la plataforma de Windows universal
  • Desarrollo web (incl. ASP.NET, mecanografiado, Azure utillaje)
  • Desarrollo de aplicaciones de escritorio de Windows con C ++
  • Desarrollo de aplicaciones móviles multiplataforma con .NET (incl. Xamarin)
  • El desarrollo de aplicaciones de escritorio .NET
  • El desarrollo de Linux y la IO con C ++
  • Desarrollo de aplicaciones móviles multiplataforma con Córdoba
  • Desarrollo de aplicaciones móviles con C ++ (incl. Android, iOS)
  • Oficina / SharePoint complemento en el desarrollo
  • El desarrollo de Python web (incl. Django y Flask support)
  • La ciencia de datos y aplicaciones analíticas (incl. R, F #, Python)
  • Desarrollo Node.js
  • Desarrollo de juegos multiplataforma (incl. Unidad)
  • Nativo de Windows desarrollo de juegos (incl. DirectX)
  • Almacenamiento y procesamiento de datos (incl. SQL, Hadoop, Azure ML)
  • Desarrollo y gestión de servicios en la nube Azure
  • Desarrollo de extensiones de Visual Studio

Si eres como yo de los curiosos aquí puedes descargar  Visual Studio “15” Preview

Esto es todo no olviden llenar la encuesta aquí.

Que es .NET Core

Microsoft anuncia la disponibilidad de .NET Core 1.0

Microsoft ha anunciado la disponibilidad de .NET Core 1.0, ASP.NET Core 1.0 y Entity Framework Core 1.0, los cuales están disponibles para Windows, OS X y GNU/Linux a través de la instalación de .NET Core 1.0.

.NET Core 1.0 forma parte del proyecto de Microsoft para ir liberando .NET bajo licencia MIT, ofreciendo un framework Open Source para crear aplicaciones web modernas, librerías y aplicaciones de consola, incluyendo las librerías y herramientas necesarias. Además Microsoft ha liberado extensiones tanto para Visual Studio como Visual Studio Code para poder crear proyectos con .NET Core. Para aquellos que estén interesados en programar con este framework, Microsoft ha publicado también documentación en su sitio web, detallando aspectos como el hecho de que es Open Source y haciendo una breve comparativa con Mono y la rama oficial .NET Framework.

Las siguientes características definen de una forma clara Core .NET:

  • Implementación flexible: se puede incluir en su aplicación o instalar lado a lado tanto a nivel del usuario como de la máquina.
  • Multiplataforma: Se ejecuta en Windows, MacOS y Linux; puede ser portado a otros sistemas operativos. Los sistemas operativos soportados (OS), CPU y de la aplicación escenarios crecerá con el tiempo, proporcionados por Microsoft, otras empresas y los individuos que contribuyan al proyecto.
  • Herramientas de línea de comando: Todos los escenarios de productos pueden ser ejercidos en la línea de comandos.
  • Compatible: .NET Core es compatible con .NET Framework, Xamarin y Mono, a través de la biblioteca estándar de .NET.
  • Open Source: La plataforma .NET Core es de código abierto, utilizando el MIT y Apache 2 licencias. La documentación está disponible bajo CC-BY. .NET Core es un proyecto de la Fundación .NET.

Lenguajes

El lenguaje C # es el principal (F # y VB son los próximos) se puede utilizar para escribir aplicaciones y bibliotecas para .NET Core. Los compiladores ejecutan en .NET Core, lo que le permite desarrollar para .NET Core en cualquier lugar que se ejecuta. En general, no utilizará los compiladores directamente, sino indirectamente utilizando las herramientas del SDK.

El compilador de C # Roslyn y las herramientas .NET centrales son o pueden ser integrados en varios editores de texto y entornos de desarrollo, incluyendo Visual Studio, Visual Studio Code, Sublime Text y el amado Vim, por lo que el desarrollo de .NET Core ofrece una opción de desarrollo en su entorno de codificación favorito y OS. Se proporciona esta integración, en parte, por la buena gente del proyecto OmniSharp.

Arquitectura

.NET Core es una aplicación .NET multiplataforma. Las preocupaciones primarias arquitectónicos únicas para .NET Core están relacionados con proporcionar implementaciones específicas de la plataforma para las plataformas soportadas.

Las principales diferencias entre .NET y Mono Core:

App-models – Mono soporta un subconjunto de las app-models de .NET Framework (por ejemplo, Windows Forms) y algunos adicionales (por ejemplo, Xamarin.iOS) a través del producto Xamarin. .NET Core no es compatible con estos.
API – Mono soporta un gran subconjunto de las API de .NET Framework, utilizando los mismos nombres de ensamblado y factorización.
Plataformas – Mono es compatible con muchas plataformas y CPU.
Open Source – Mono y .NET Core tanto el uso de la licencia MIT y son proyectos de la Fundación .NET.
Enfoque – El enfoque principal de Mono en los últimos años es plataformas móviles, mientras .NET Core se centra en las cargas de trabajo en la nube.

Para mas info visitar la documentación oficial aquí

Aquellos que quieran instalarlo sobre GNU/Linux, oficialmente ofrece soporte para RHEL, Ubuntu, Linux Mint, Debian, Fedora, CentOS, Oracle Linux y openSUSE. También existe una imagen de Docker para el despliegue de aplicaciones.

Descargar .NET Core.

Fuente | Microsoft