Foros del Web » Programación para mayores de 30 ;) » .NET »

invoke

Estas en el tema de invoke en el foro de .NET en Foros del Web. Hola: En Visual C# Express 2008 me funciona muy bien el invoke, pero al intentar pasarlo a MonoDevelop 1 me da error que es este: ...
  #1 (permalink)  
Antiguo 24/02/2009, 16:33
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 17 años
Puntos: 8
invoke

Hola:

En Visual C# Express 2008 me funciona muy bien el invoke, pero al intentar pasarlo a MonoDevelop 1 me da error que es este:

[Task:File=/home/metaconta/prueba_04/prueba_04/MainWindow.cs, Line=45, Column=22, Type=Error, Priority=Normal, Description=Type `MainWindow' does not contain a definition for `invoke' and no extension method `invoke' of type `MainWindow' could be found (are you missing a using directive or an assembly reference?)(CS1061)]

Sospecho que falta algún using o algo.

Código:
// MainWindow.cs created with MonoDevelop
// User: metaconta at 17:10*24/02/2009
//
// To change standard headers go to Edit->Preferences->Coding->Standard Headers
//
using System;
using Gtk;
using System.IO.Ports;
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Linq; 
using System.Text;

public partial class MainWindow: Gtk.Window
{	
	private SerialPort mySerial;
	// Utilizaremos un string  como Buffer de recepción.
	string Recibidos;
	public MainWindow (): base (Gtk.WindowType.Toplevel)
	{
		Build ();
		mySerial = new SerialPort("/dev/ttyS0", 9600, Parity.None, 8, StopBits.Two);
		if (!mySerial.IsOpen)
		{
			try
			{
				mySerial.Open();
			}
			catch (System.Exception ex)
			{
				label1.Visible = true;
				label1.Text = ex.ToString();
			}
		}
	// Ejecutar la función Recepcion por disparo de evento DataReived.
		mySerial.DataReceived += new SerialDataReceivedEventHandler(Recepcion);
	}
	
	// Al recibir los datos.
	private void Recepcion(object sender, SerialDataReceivedEventArgs e)
	{
		// Acumular los carácter recibidos a nuestro "buffer" (string).
		Recibidos += mySerial.ReadExisting();
		// Invocar o llamar el proceso de tramas.
		this.invoke(new EventHandler(Actualizar));
	}
	// Procesar los daros recibidos en el buffer y extraer tramas completas.
	private void Actualizar(object s, EventArgs e)
	{
		// Designar el valor de la trama textBox.
		//textview_visualizar_mensaje.Text = Recibidos;
		entry_visualizar_mensaje.Text = Recibidos;
	}
	
	protected void OnDeleteEvent (object sender, DeleteEventArgs a)
	{
		Application.Quit ();
		a.RetVal = true;
	}

	protected virtual void OnButtonTClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x74; // ASCII letra t.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}

	protected virtual void OnButtonBClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x62; // ASCII letra b.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}

	protected virtual void OnButtonAClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x61; // ASCII letra a.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}

	protected virtual void OnButtonLClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x6C; // ASCII letra l.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}

	protected virtual void OnButtonEspacioClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x20; // ASCII letra Espacio.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}
}
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #2 (permalink)  
Antiguo 24/02/2009, 17:14
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: invoke

en gtk cambia un poco, prueba


Gtk.Application.Invoke en vez de this.Invoke
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 24/02/2009, 17:40
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 17 años
Puntos: 8
Respuesta: invoke

Funciona ese metodo que me dijiste y gracias.

Ahora, no me lee la entrada de datos en un textBox, label, etc... que sea algo que lea los mensajes desde el PIC.

Código:
// MainWindow.cs created with MonoDevelop
// User: metaconta at 17:10*24/02/2009
//
// To change standard headers go to Edit->Preferences->Coding->Standard Headers
//
using System;
using Gtk;
using System.IO.Ports;
using System.ComponentModel; 

public partial class MainWindow: Gtk.Window
{	
	private SerialPort mySerial;
	// Utilizaremos un string  como Buffer de recepción.
	string Recibidos;
	public MainWindow (): base (Gtk.WindowType.Toplevel)
	{
		Build ();
		mySerial = new SerialPort("/dev/ttyS0", 9600, Parity.None, 8, StopBits.Two);
		if (!mySerial.IsOpen)
		{
			try
			{
				mySerial.Open();
			}
			catch (System.Exception ex)
			{
				label1.Visible = true;
				label1.Text = ex.ToString();
			}
		}
	// Ejecutar la función Recepcion por disparo de evento DataReived.
		mySerial.DataReceived += new SerialDataReceivedEventHandler(Recepcion);
	}
	
	// Al recibir los datos.
	private void Recepcion(object sender, SerialDataReceivedEventArgs e)
	{
		// Acumular los carácter recibidos a nuestro "buffer" (string).
		Recibidos += mySerial.ReadExisting();
		// Invocar o llamar el proceso de tramas.
		Gtk.Application.Invoke(new EventHandler(Actualizar));
	}
	// Procesar los daros recibidos en el buffer y extraer tramas completas.
	private void Actualizar(object s, EventArgs e)
	{
		// Designar el valor de la trama textBox.
		//textview_visualizar_mensaje.Text = Recibidos;
		entry_visualizar_mensaje.Text = Recibidos;
		label2.Text = Recibidos;
	}
	
	protected void OnDeleteEvent (object sender, DeleteEventArgs a)
	{
		Application.Quit ();
		a.RetVal = true;
	}

	protected virtual void OnButtonTClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x74; // ASCII letra t.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}

	protected virtual void OnButtonBClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x62; // ASCII letra b.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}

	protected virtual void OnButtonAClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x61; // ASCII letra a.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}

	protected virtual void OnButtonLClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x6C; // ASCII letra l.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}

	protected virtual void OnButtonEspacioClicked (object sender, System.EventArgs e)
	{
		byte[] mBuffer = new byte[1];
		mBuffer[0] = 0x20; // ASCII letra Espacio.
		mySerial.Write(mBuffer, 0, mBuffer.Length);
	}
}

Precisamente los datos que deseo que se vea los textos desde el PIC qu esean un textBox o algo que se le parezca, el programa funciona bien pero no muestra los datos como un HyperTerminal de Windows.

Código:
	// Procesar los daros recibidos en el buffer y extraer tramas completas.
	private void Actualizar(object s, EventArgs e)
	{
		// Designar el valor de la trama textBox.
		//textview_visualizar_mensaje.Text = Recibidos;
		entry_visualizar_mensaje.Text = Recibidos;
		label2.Text = Recibidos;
	}
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #4 (permalink)  
Antiguo 24/02/2009, 17:57
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: invoke

si no estoy equivocado el Gtk.ApplicationInvoke recibe solo el nombre del delegado

prueba

Gtk.Application.Invoke(Actualizar);
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 24/02/2009, 18:04
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 17 años
Puntos: 8
Respuesta: invoke

Hola de nuevo amigo. Lo he puesto los dos asi y no funciona nada de nada pero puedo ejecutar el programa, solo que no lee nada.

Código:
Gtk.Application.Invoke(new EventHandler(Actualizar));
		Gtk.Application.Invoke(Actualizar);
A partir de la pagina 195 de este manual http://www.abcdatos.com/tutoriales/tutorial/z9521.html puedes ver el codigo completo en Visual C# Express 2008 en el cual estoy adaptando a MonoDevelop bajo openSUSE 11.1.

Saludo.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #6 (permalink)  
Antiguo 24/02/2009, 18:19
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: invoke

revisa esto

http://www.mono-project.com/Responsive_Applications y busca sobre lo que te digo hay ejemplos, pero a menos que no este logrando leer el puerto no le veo otra explicacion.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:35.