• Domingo 19 de Mayo de 2024, 03:25

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Dev_NIX

Páginas: [1]
1
C# / Bloqueo de la aplicación usando System.Threads
« en: Martes 25 de Octubre de 2011, 07:10 »
Buenas!

Estoy siguiendo con el programilla del principio. Consiste en un editor de textos básico, al cual le quiero ir metiendo características poco a poco. Una de ellas es que compruebe si un archivo que tenemos abierto ha sido modificado por otro programa, para preguntar si se quiere cargar el nuevo archivo o no, de momento solo quiero que me muestre una alerta, y más adelante daré la opción de recargar.

La idea es que lo compruebe en un hilo ejecutado cada cinco segundos, lo que hago es contrastar la fecha de modificación actual del archivo con la fecha de modificación al abrirlo con mi editor.

El problema es que sin comerlo ni beberlo, en lo que abro el archivo me saca la alerta, y se queda el programa colgado... ¿Alguien ha trabajado con hilos antes?  :ayuda:

El código es el siguiente:
Código: C#
  1. using System;
  2. using System.IO;
  3. using System.Collections;
  4. using System.Threading;
  5. using Gtk;
  6.  
  7. public partial class MainWindow : Gtk.Window
  8. {
  9.         public MainWindow () : base(Gtk.WindowType.Toplevel)
  10.         {
  11.                 Build ();
  12.         }
  13.  
  14.         protected void OnDeleteEvent (object sender, DeleteEventArgs a)
  15.         {
  16.                 a.RetVal = true;
  17.                 Application.Quit();
  18.         }
  19.  
  20.         protected virtual void menu_exit (object sender, System.EventArgs e)
  21.         {
  22.                 Application.Quit();
  23.                
  24.         }
  25.        
  26.         protected virtual void open_file (object sender, System.EventArgs e)
  27.         {
  28.                 FileChooserDialog fc = new Gtk.FileChooserDialog(
  29.                         "Elija el archivo a abrir",
  30.                 this,
  31.             FileChooserAction.Open,
  32.             "Cancelar",ResponseType.Cancel,
  33.             "Abrir",ResponseType.Accept
  34.                 );
  35.                
  36.                 if (fc.Run() == (int)ResponseType.Accept){                      // Si se ha seleccionado el archivo...
  37.                         System.IO.StreamReader file = new System.IO.StreamReader(fc.Filename);
  38.                        
  39.                         this.textview1.Buffer.Text = file.ReadToEnd();
  40.                         file.Close();
  41.                        
  42.                         // Creamos el hilo para comprobar si el archivo fue modificado
  43.                         Thread checkFileDate1 = new Thread(() => checkFileDate(fc.Filename));
  44.                         //Thread checkFileDate1 = new Thread(new ThreadStart(checkFileDate));
  45.                         checkFileDate1.Start();
  46.                 }
  47.                
  48.                 fc.Destroy();
  49.         }
  50.        
  51.         // Esto se encarga de comprobar si los ficheros abiertos han sido cambiados
  52.  
  53.         public void checkFileDate(string file)
  54.         {
  55.                 DateTime lastDate = System.IO.File.GetLastWriteTime(file);
  56.                 while(true){
  57.                         int result = DateTime.Compare(lastDate, System.IO.File.GetLastWriteTime(file));
  58.                        
  59.                         if (result >= 0){
  60.                                 MessageDialog alert = new MessageDialog (
  61.                                         this,
  62.                         DialogFlags.DestroyWithParent,
  63.                                         MessageType.Info,
  64.                                         ButtonsType.Ok,
  65.                                         "¡El archivo ha sido modificado!"
  66.                                 );
  67.                                        
  68.                                 alert.Run();
  69.                                 alert.Destroy();
  70.  
  71.                                 //MessageBox.Show("¡El archivo ha sido modificado!");
  72.                         }
  73.                        
  74.                         Thread.Sleep(5000);
  75.                 }
  76.         }
  77. }
  78.  
  79.  

Destacar que utilizo GTK# en vez de los Winforms porque quiero que la aplicación sea multiplataforma, igual no os suenan cosas como FileChooserDialog o MessageDialog pero bueno, se entienden y no tienen mucho que ver con el problema...

¡Un saludo, a ver en qué termina esto!

2
C# / Re:Como enviar un mensaje a un celular
« en: Jueves 20 de Octubre de 2011, 01:54 »
Vaya, yo conocía lo de los correos pero pensaba que ya no estaban activos, por lo menos en España :S

3
C# / Re:Como enviar un mensaje a un celular
« en: Miércoles 19 de Octubre de 2011, 06:36 »
Hay varias empresas que ofrecen estos servicios, nada que google no resuelva.

Te he encontrado una que además de mandar SMS, tiene una APÌ (como muchas otras, realmente) para varios lenguajes, incluido .NET.

http://www.esendex.co.uk/Developers/SDKs/NET-SMS-SDK

Espero que te haya servido de ayuda!

4
C# / Re:MonoDevelop, y la portabilidad de sus aplicaciones!!
« en: Martes 18 de Octubre de 2011, 08:20 »
¡Solucionado! Creo que era cosa de DLLs.

Por cierto, lo que estoy probando ahora mismo es a abrir un fichero de texto, y poner los contenidos en un Text View (luego me ocuparé de cosas como guardar cambios, historial, etc).

Cuando abro un archivo, todo perfecto excepto por un detalle: al final del txt abierto, me imprime un salto de línea de más en el Text View.

Me preguntaba si podría ser la forma de abrir el archivo, si es una movida de saltos de linea, o qué. He aquí el código que uso para abrir un fichero e imprimirlo
Código: C#
  1. protected virtual void open_file (object sender, System.EventArgs e)
  2.         {
  3.         Gtk.FileChooserDialog fc = new Gtk.FileChooserDialog(
  4.                 "Elija el archivo a abrir",
  5.                 this,
  6.                 FileChooserAction.Open,
  7.                 "Cancelar",ResponseType.Cancel,
  8.                 "Abrir",ResponseType.Accept
  9.         );
  10.                
  11.                 if (fc.Run() == (int)ResponseType.Accept){
  12.                         System.IO.StreamReader file = new System.IO.StreamReader(fc.Filename);
  13.                        
  14.                         this.textview1.Buffer.Text = file.ReadToEnd();
  15.                         file.Close();
  16.                 }
  17.                
  18.                 fc.Destroy();
  19.         }

5
C# / Re:MonoDevelop, y la portabilidad de sus aplicaciones!!
« en: Lunes 17 de Octubre de 2011, 16:33 »
Si que ayuda, si XD

Miraré lo del try catch, pero ya te digo que no muestra ni la ventana principal xDDD

Ya miraré esta noche el tema de arquitectura y versiones, aunque dudo que sea eso...

¡Ya contestaré, muchas gracias!

6
C# / MonoDevelop, y la portabilidad de sus aplicaciones!!
« en: Lunes 17 de Octubre de 2011, 08:10 »
Buenas!!

Llevo un par de días iniciándome en las aplicaciones de escritorio con C#. Como me interesaba hacerlo todo multiplataforma, decidí tirar de Mono y GTK#, y la verdad es que estoy contento con los resultados :D

Mi problema es el siguiente:

Si compilo una aplicación tanto en ubuntu como en windows xp, el mismo ejecutable funciona sin problemas. Para probar, mandé el ejecutable a un par de colegas con windows 7, pero al parecer les suelta un error, y se cierra (sin llegar a mostrar la main window).

Lo extraño es que todos tenemos .NET instalado. ¿Serán movidas raras de arquitectura (y debo compilar en windows 7 para que funcione ahí), o es que tal vez necesiten algunas DLL en concreto por el tema de GTK#?

A lo mejor es una pregunta estúpida, pero soy nuevo en estos temas y aún me parece un poco raro esto, soy de esos bichos raros que vienen de C/C++  :nosweat:

Bueno, saludos para todos, que este es mi primer post y esas cosas, espero poder seguir escribiendo tanto en este foro como en MonoDevelop, un saludo!!!

EDIT: Luego os pregunto una cosa facilona de leer ficherillos ^^

Páginas: [1]