Aug 30 2010

C# Como hacer una captura de pantalla

Category: ProgramacionIndigo @ 10:27 PM

En muchas aplicaciones de escritorio puede sernos útil recopilar información cuando se produzca una excepción no controlada. Podemos recopilar la información de la excepción analizando las propiedades Message o StackTrace. Otra información útil puede ser capturar la pantalla y ver que estaba haciendo el usuario en nuestra aplicación en el momento que falló.
Continue reading “C# Como hacer una captura de pantalla”

Tags:


Aug 03 2010

WPF – Como asignar la propiedad ZIndex

Category: ProgramacionIndigo @ 5:35 PM

Según la MSND la propiedad ZIndex del objeto Panel sirve para el establecer el orden en el que se muestran los elementos en el plano Z.
Continue reading “WPF – Como asignar la propiedad ZIndex”

Tags: , ,


Aug 02 2010

¿Que es Windows Presentation Foundation (WPF)?

Category: ProgramacionIndigo @ 3:46 PM

¿Qué es WPF?
De una manera rápida, WPF (Windows Presentation Foundation) es una tecnología que nos permite aprovechar al máximo las características gráficas de nuestros equipos ofreciendo interfaces más ricas de las que estamos acostumbrados. El objetivo de WPF es proporcionar avances en el entorno de las aplicaciones de escritorio que permitan crear interfaces mucho más atractivas evitando una disminución del rendimiento de nuestras aplicaciones, como ocurre actualmente con Windows.Forms.
Continue reading “¿Que es Windows Presentation Foundation (WPF)?”

Tags: ,


Jan 23 2010

C# El método MapPath

Category: ProgramacionIndigo @ 4:58 PM

Un método bastante utilizado cuando desarrollamos aplicaciones web en ASP.NET es el método MapPath. Este método puede ser llamado de la siguiente manera

string path = HttpContext.Current.Server.MapPath("~");

Continue reading “C# El método MapPath”

Tags: , ,


Jan 11 2010

C# Como obtener la fecha de compilación de un ensamblado

Category: ProgramacionIndigo @ 9:47 PM

Para poder obtener la fecha de compilacion de un ensamblado, tendremos que hacer dos cosas
Continue reading “C# Como obtener la fecha de compilación de un ensamblado”

Tags: , , ,


Jan 05 2010

Error usando System.Linq

Category: ProgramacionIndigo @ 5:28 PM

El otro día el Visual Studio me dio el siguiente error de compilación

Error 8 Could not find an implementation of the query pattern for source type
'System.Data.Linq.Table<Model.Provincia>'. 'Select' not found.
Are you missing a reference to 'System.Core.dll' or a using directive for 'System.Linq'?

Continue reading “Error usando System.Linq”

Tags: ,


Jan 29 2009

C# Comprimir y descomprimir un String (GZipStream)

Category: ProgramacionIndigo @ 11:05 PM

La verdad es que hace tiempo que no escribo nada en el blog, pero es que he estado bastante liado. Una de las últimas cosas que he tenido que hacer es comprimir un xml antes de guardarlo a disco ya que este ocupaba más de 5 megas y no era cuestión de tener ese espacio ocupado “inútilmente”. Aunque visto al precio que esta el MB o el GB podría evitarme estas molestias. La primera idea sería usar un compresor externo vía línea de comandos para comprimir esa cadena de texto. Como es lógico esta opción es muy poco viable. Otra solución sería implementar nosotros mismos un algoritmo de compresión y descompresión. Esta opción sería bastante interesante si quisiéramos pasar algo de tiempo aprendiendo sobre algoritmos de compresión, pero como no es el caso, también queda descartada. Ya sólo nos queda la opción de buscar algo dentro del framework de .NET y como suele ocurrir casi siempre, el framework nos trae una clase para esta tarea. En concreto es la clase GZipStream de la cual podemos leer mas información aquí.
Continue reading “C# Comprimir y descomprimir un String (GZipStream)”

Tags: , , ,


Nov 23 2008

C# Reproducir un fichero wav (SoundPlayer)

Category: ProgramacionIndigo @ 4:54 PM

Uno de los motivos por lo que he estado tanto tiempo sin actualizar el blog es porque he estado metido en una puesta de producción dondo todo lo que ha podido ir mal, ha ido mal (siempre se cumplen la leyes de Murphy). Una de las cosas que se cambiaron a última hora, fueron unas notificaciones sonoras en muchas partes del programa. Yo tenía un código relativamente antiguo para reproducir un sonido.

[sourcecode language="csharp"]public int SND_ASYNC = 0×0001; // play asynchronously
public int SND_FILENAME = 0×00020000; // use file name
public int SND_PURGE = 0×0040; // purge non-static events

[System.Runtime.InteropServices.DllImport("WinMM.dll")]
public static extern bool PlaySound(string fname, int Mod, int flag);

private void button1_Click(object sender, EventArgs e)
{
PlaySound(”tada.wav”, 0, SND_FILENAME | SND_ASYNC);
}[/sourcecode]

Este código funciona perfectamente, pero nunca me ha gustado usar este tipo de codigo usando liberirías externas. Mirando en la MSDN encontré otra solución que me parece muchísimo mejor. Resulta que desde .NET 2.0 tenemos la clase SoundPlayer en el espacio de nombre System.Media que nos ayuda perfectamente a reproducir un sonido. El código para ésto es así de fácil

[sourcecode language="csharp"]private void button2_Click(object sender, EventArgs e)
{
System.Media.SoundPlayer soundPlayer = new System.Media.SoundPlayer();
soundPlayer.SoundLocation = “tada.wav”;
soundPlayer.Play();
}[/sourcecode]

Tenemos más información sobre esta clase en http://msdn.microsoft.com/en-us/library/system.media.soundplayer(VS.80).aspx

Tags: ,


Oct 29 2008

Presentadas las novedades de C# 4.0 en el PDC 2008

Category: GeneralIndigo @ 12:24 PM

En el PDC 2008 (Professional Developers Conference) de este año se están presenta muchísimas cosas. En este post hablaré de las novedades de C# 4.0.  En una presentación de Anders Hejlsberg (Technical fellow en Microsoft, uno de los padres de la criatura y arquitecto principal) y tras una pequeña introducción sobre la evolución de C #, y antes de dejar encandilada a la audiencia, Anders ha realizado un pequeño repaso de las tendencias actuales en cuanto a lenguajes de programación:

  • Programación más declarativa.
  • Programación dinámica.
  • Programación concurrente (multicore), ya que como todos sabéis, la tendencia actual (una vez que la ley de Moore podemos decir que se ha parado) es añadir más y más procesadores…¿Cómo construimos aplicaciones para este nuevo escenario en el que la concurrencia es necesaria? En plataforma .NET la respuesta la tenemos en las Parallel Extensions para .NET, que formarán parte de la nueva versión de Visual Studio (VS 2010) y de .NET Framework (4.0).

Para la programación dinámica ello, C# 4.0 tendrá una serie de características dinámicas que permitan:

  • Objetos tipados de manera dinámica. La clave estará en una nueva palabra clave que aparece en escena: dynamic.
  • Mejorada la interoperabilidad COM.
  • Optinal and named parameters.
  • Co-and Contra-Variance.

Tendremos un nuevo runtime para C# 4.0 que nos habilitará esta programación dinámica sobre la base de innovaciones ya existentes como los árboles de expresión y las expresiones lambda de C# 3.0, pero añadiendo nuevas innovaciones:

  • Dynamic trees.
  • Dynamic Dispatch invocer.
  • Call Site Caching.

Sobre este nuevo runtime, tendremos los lenguajes de programación tradicionales de .NET, C# y VB.NET, pero también lenguajes dinámicos como IronRuby y IronPhyton, y por supuesto cualquier otro lenguaje que cumpla la correspondiente CLS (Common Language Specification). Pero además, podremos hacer desde cualquier lenguaje comentado un binding con otro de los lenguajes, es decir, podremos llamar de manera sencilla código Phyton desde C# y utilizarlo. Tendremos bindings para .NET (Object), para JavaScript (Silverlight), para Phyton, Para Ruby y otros.

Dejaré para otros post otras novedades como Visual Studio 2010, el nuevo Windows Azure o la presentación del Windows 7.

Tags: , ,


Oct 23 2008

C# Enviar correo electronico desde .NET

Category: ProgramacionIndigo @ 10:05 AM

ara enviar un correo electrónico tenemos que usar los siguientes espacios de nombres

[sourcecode language='csharp']using System.Net;
using System.Net.Mail;[/sourcecode]

Con esto tendremos a nuestra disposición una serie de clases que nos harán la vida muy fácil para conseguir nuestro objetivo. Para enviar un correo electrónico necesitamos la siguiente información

  • Servidor smtp
  • Puerto (normalmente 25)
  • Nombre de usuario y contraseña en caso que el servidor requiera autencación.

El código es tan simple como este

[sourcecode language='csharp']try
{
SmtpClient smtpClient = new SmtpClient(”Servidor SMTP”, 25);

// Si tu servidor necesita autenticación
if ((_userName != string.Empty) &amp;amp;&amp;amp; (_password != string.Empty))
{
NetworkCredential networkCredential = new NetworkCredential(”username”, “passwor”);
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = networkCredential;
}

string body = string.Empty;
if (_isBodyHtml)
body = “Tu mensaje en html.”;
else
body = “Tu mensaje en texto plano.”;

MailMessage mailMessage = new MailMessage(”from”, “to”, “subject”, body);
mailMessage.IsBodyHtml = _isBodyHtml;

if (_sendAsync)
smtpClient.SendAsync(mailMessage, null);
else
smtpClient.Send(mailMessage);
}
catch
{
throw;
}

[/sourcecode]

  • Al principio creamos una instancia del objeto SmtpClient para lo cual necesitamos una dirección del host y el puerto de conexión.
  • Despues, es caso de que nuestro servidor requiera autenticación, creamos la credenciales que se usar al conectar con nuestro servidor de correo.
  • Despues construimos el mensaje, en base a la variable _isBodyHtml que nos dirá si el mensaje irá en texto plano o en html.
  • Posteriormente creamos el mensaje de correo, con un from (de), to (para), subject(asunto) y el mensaje.
  • Y para finalizar se envia el correo de manera síncrona o asíncrona dependiendo de _sendAsync.

Como vemos es realmente fácil. En caso que el envio te falle ten en cuenta

  1. Comprueba que los datos del host, nombre de usuario y contraseña sean correctos.
  2. Tengas acceso a la red y no salgas a Internet a través de un proxy.
  3. Comprobar si el antivirus te está bloqueando el envio del correo. A mi con el McAfee activado no puedo enviar correos.

Saludos.

Tags: ,


Next Page »