• Domingo 19 de Mayo de 2024, 05:39

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.


Temas - 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# / 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]