Ver por etiquetas

Todas las etiquetas » C# (RSS)

Emitiendo para toda la galaxia, ¿hay alguien ahí?: Lo que todo desarrollador debe saber sobre los eventos en .Net

La manera que las clases tiene de alertar a otras clases en los lenguajes orientados a objetos modernos es lanzar eventos. Una clase que no expone eventos, hace mucho más ardua la tarea de los desarrolladores que la consumen a la hora de detectar cambios en su estado. Una clase sin eventos es un clase incomunicada, que dirían los O’funk’illo. En en sentido amplio, se podría decir que toda clase que diseñemos y que mantenga un estado, debería tener eventos...
Publicado por Rodrigo Corral | 9 comment(s)

Invocar delegados anónimos asíncronamente (o como usar el pool de hilos en dos líneas de código)

Una de las características mas interesantes de los delegados es que pueden ser invocados de manera asíncrona. La pega de los delegados es que hay que declararlos, y hacer una función para asignarla al delegado y luego ya podremos hacer la invocación asíncrona. Las ventajas de la invocación asíncrona respecto a crear un hilo explicitamente son varias: menor cantidad de código y sobre todo, que el hilo será un hilo de pool de hilos de .Net, con las ventajas para el rendimiento que esto lleva asociadas...
Publicado por Rodrigo Corral | 6 comment(s)
Archivado en: ,

Ejecución remota de comandos contra máquinas Unix desde .Net

Estoy involucrado en un interesante proyecto que tiene por objetivo demostrar que VSTS for Tester es una plataforma interesante a la hora de testear arquitecturas no centradas en plataforma Microsoft, arquitecturas muy heterogéneas. Un primer post relacionado este proyecto fue: Pruebas web de Team System usando Firefox . Y seguro que habrá más. Uno de los primeros pasos que tengo que dar es obtener de manera remota información del comportamiento, desde el punto de vista del rendimiento, de una máquina...

Rompe tus cadenas...

Ya lo decía Reincidentes en su mítica canción Carmén: Y esto no (qué estás esperando) cambiará (qué estás esperando) sin luchar (rompe tus cadenas) pa salir. Y es que parece mentira como las cadenas y su manipulación vienen siendo un problema desde los tiempos de C. Digo esto por que últimamente me he encontrado con dos usos anómalos de cadenas en código que he visto: El primer uso anómalo consiste en usar el + y el \n o el espacio para escribir cadenas. Solo afecta a la legibilidad y mantenibilidad...
Publicado por Rodrigo Corral | 12 comment(s)
Archivado en: ,

¿De verdad no tiene esto el Framework?...

Escribo este post por dos motivos: uno que quiza a alguien le sirva esta funcioncita y dos, que quizás alguien me ayude con mi dilema. Ya se que esto es mucho más mundano que los retos de Programacia101 ... pero bueno. Necesito calcular las horas transcuridas en el año para un fecha y hora dadas . La única manera de solucionar el problema que he encontrado es con la función que muestro abajo, pero no puedo creer que no haya una manera más elegante de solucionar este problema. Incluso sospecho que...
Publicado por Rodrigo Corral | 15 comment(s)
Archivado en: ,

De C/C++ a C# de la mano de Petzold

Charles Petzold autor de varios libros que son 'la biblia' para los desarrolladores en plataforma Windows, ha escrito un libro, .Net Book Zero (en inglés) que se puede descargar gratuitamente en pdf o xps , en el que guia a los programadores de C/C++ hacia el desarrollo en plantaforma .Net con C#. Por lo que he tenido ocasión de ojear del libro parece que merece la pena hecharle un vistazo. Destacar que aborda cuestiones del Framework 2.0 como genéricos y tipos anulables. Además el libro viene acompañado...
Publicado por Rodrigo Corral | 2 comment(s)
Archivado en: ,,

Por fin: Code Snippets en Visual C++

Con la liberación de Microsoft Visual Studio 2005 IDE Enhancements hace pocas semanas, los code snippets han llegado a Visual C++. Para insertarlos podemos usar los nuevos menus contextuales que nos aparecerán: La otra opción para insertarlos es escribir el identificador del Code Snippet y pulsar dos veces TAB. Lo bueno no es solo que contemos con unos cuantos Code Snippets ya disponibles, sino que podemos comenzar a crear los nuestros propios. Es sencillo escribir Code Snippets pues se crean en...
Publicado por Rodrigo Corral | con no comments
Archivado en: ,

¿Cómo enumerar los procesos que esta ejecutando la máquina?

Es una pregunta que me hacen o leo frecuente. Utilizando el Api de Win32, lo mejor es usar la función EnumProcs que esta disponible en este articulo de la Knowledge Base de Microsoft. En el mundo .net es algo más sencillo, basta utilizar el método GetProcesses de la clase Process . Tambien hay una entrada sobre el tema en la Knowledge Base , que explica como hacerlo en VB.net pero el código en C# es bien simple: using System.Diagnostics; ... Process[] running = Process.GetProcesses(); foreach(Process...
Publicado por Rodrigo Corral | 2 comment(s)
Archivado en: ,,

El Just-In-Time Debugger...

El Just-in-time debugger básicamente es un hook, que cuando algún programa falla, por ejemplo, con una excepción no controlada o una violación de acceso a memoria, hace que el depurador que tienes instalado y regitrado en la máquina se active. Tambien es cierto que en ocasiones puede ser un poco molesto y por tanto deseemos desactivarlo o sustituirlo por otro depurador. Para realizar cualquiera de estas dos acciones hay que modificar una clave del registro (yo que tu antes la exportaría), en concreto...
Publicado por Rodrigo Corral | 51 comment(s)
Archivado en: ,,,

¿Cómo se si mi proceso fue lanzado con privilegios de administrador?

Aqui va una función que permite averiguarlo: //Comprueba que el usuario que inicio el proceso sea administrador bool UserIsAdmin(void) { bool bSuccess = false; //Obetenemos el token del proceso HANDLE hToken = NULL; if ( !OpenProcessToken ( GetCurrentProcess ( ), TOKEN_QUERY, &hToken ) ) return false; //Obtenemos el tamaño necesarios para la información del grupos //asociados al token del proceso DWORD dwSize = 0; bSuccess = GetTokenInformation(hToken, TokenGroups, NULL, 0, &dwSize) != 0;...
Publicado por Rodrigo Corral | 3 comment(s)
Archivado en: ,,

¿Cómo hago que mi aplicación soporte multiples idiomas?

En las aplicaciones nativas un enfoque que se utiliza bastante es el de tener una dll de recursos para cada idioma que se desea soportar. Esta dll se carga dinamicamente con LoadLibray (o AfxLoadLibray en MFC) y se establece como origen de los recursos. Para saber como crear esta dll lee Creating a Resource-Only DLL en la MSDN. Tipicamente harás esto en InitInstace: BOOL CMyApp::InitInstance() { //Default Appwizard code. HINSTANCE hRes = NULL; hRes= LoadLibrary("ResourceD.dll"); if(hRes) AfxSetResourceHandle...
Publicado por Rodrigo Corral | con no comments
Archivado en: ,,

¿Cómo puedo acceder al puerto serie/paralelo?

Tienes que usar las funciones del API de Win32 habituales para trabajar con ficheros, OpenFile, ReadFile, WriteFile, expecificando como nombre de fichero el nombre del puerto que quieres usar "LPTx" o "COMx". Este articulo sobre el tema es muy intersante Serial Communication in Windows By Ashish Dhar En .Net, en versiones anteriores a la 2.0, tienes que usar PInvoke para trabajar con el puerto paralelo. Un articulo que describe muy bien el proceso es: Use P/Invoke to Develop a .NET Base Class Library...
Publicado por Rodrigo Corral | 5 comment(s)
Archivado en: ,,

Colección de Code Snippets adicionales para VS 2005

Supongo que todos conocereís ya los code snippets de Visual Studio 2005. Pues bien además de los que vienen por defecto podemos descargar y utilizar un mónton de ellos más . Les hay para VB, C# y Visual Stuido Tools for Office (VSTO), y nos proporcionan código para trabajar con bases de datos, comprobar la conectividad, trabajar con el sistema de archivos, con XML, y un largo ecétera...
Publicado por Rodrigo Corral | 1 comment(s)
Archivado en: ,,

¿Como obtengo el path de capetas del sistema (por ejemplo System, Archivos de Programa etc...)?

Si estas programando una aplicación nativa (en C++) debes usar la función SHGetFolderPath, si quieres añadir un subdirectorio al valor devuelto (p.e.: C:\Archivos de programa\Tu applicacion) lo puedes hacer directamente con la función SHGetFolderPathAndSubDir. Estas funciones tienen como requisito Windows 95 con Internet Explorer 5.0, Windows 98 con Internet Explorer 5.0, Windows 98 Second Edition (SE), Windows NT 4.0 con Internet Explorer 5.0, Windows NT 4.0 con Service Pack 4 (SP4). Tambien puedes...
Publicado por Rodrigo Corral | 1 comment(s)
Archivado en: ,,