none
Convertir código Consola a aplicación C# RRS feed

  • Pregunta

  • Buen día... tengo la siguiente situación... el siguiente código consola de C# necesito pasarlo
    a aplicación de escritorio... lo he intentado con hilos y me vuelvo loco y me pierdo, je...
    la variable "numero" es la que debo mostrar en un textbox (label, lo que sea)... la parte del
    "static void Main(string[] args)" y su contenido no tengo idea de como o en que parte del Form
    pasarla... pues es lo que activa al modem, pero en el load no se si está bien ponerle el
    "string[] args" (algo asi como "...Load(String[] args)" pues lo hice y me salía un error de
    "object sender e" que hacía falta (pues fue lo que le quité para ponderle lo de "args"...


    using System.IO;
    using System.IO.Ports;
    using System.Text;
    using System;

    class Program
    {
    static SerialPort ComPort;
    static ASCIIEncoding ASCIIEncoder = new ASCIIEncoding();

    public static void OnSerialDataReceived(object sender, serialDataReceivedEventArgs args)
    {

    //SE ALMACENA EL EVENTO ACTUAL DEL PUERTO EN LA VARIABLE DATA
    string data = ComPort.ReadExisting();
    string numero = "";

    //SACAMOS LOS DATOS DEL NUMERO TELEFONICO
    if (data.Length >= 30)
    {
    numero = data.Substring(29,10);
    //ESTE DATO ES EL QUE NECESITO QUE SE MUESTRE EN TEXTBOX
    System.Console.Write("El numero es: " + numero);
    }
    }

    static void Main(string[] args)
    {
    string port = "COM3";
    int baud = 9600;
    if (args.Length >= 1)
    {
    port = args[0];
    }
    if (args.Length >= 2)
    {
    baud = int.Parse(args[1]);
    }

    InitializeComPort(port, baud);

    string text;

    //ACTIVAR IDENTIFICADOR DE LLAMADAS...
    //ESTO SE DEBE PASAR, PODRIA SER, A UN TEXTBOX MULTILINEA
    String ComandoATID;
    ComandoATID = "AT+VCID=1";
    ComPort.Write(ComandoATID + '\r');

    do
    {
    //CAPTURAMOS EL TEXTO ESCRITO EN LA CONSOLA
    text = System.Console.ReadLine();

    //ESCRIBIMOS EN LA CONSOLA EL TEXTO CAPTURADO
    ComPort.Write(text + '\r');
    }
    while (text.ToLower() != "q");

    }

    private static void InitializeComPort(string port, int baud)
    {
    ComPort = new SerialPort(port, baud);
    // ComPort.PortName = port;
    // ComPort.BaudRate = baud;
    ComPort.Parity = Parity.None;
    ComPort.StopBits = StopBits.One;
    ComPort.DataBits = 8;
    ComPort.Handshake = Handshake.None;
    ComPort.DataReceived += OnSerialDataReceived;
    ComPort.Open();
    }
    }

    Ojalá puedan ayudarme y muchas gracias...

    lunes, 4 de agosto de 2014 22:29

Respuestas

  • El mensaje original debió pegarse en el foro del lenguaje C#.

    using System;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            SerialPort ComPort; 
            ASCIIEncoding ASCIIEncoder = new ASCIIEncoding();
    
            public delegate void EscribeTexto(string texto);
            private EscribeTexto textoNumero;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                string[] args = Environment.GetCommandLineArgs();
    
                string port = "COM3";
                int baud = 9600;
                if (args.Length > 1)
                { port = args[1]; }
                if (args.Length > 2)
                { baud = int.Parse(args[2]); }
    
                InitializeComPort(port, baud);
    
                textoNumero = EscribeNumero;
     
                //ACTIVAR IDENTIFICADOR DE LLAMADAS...	
                //ESTO SE DEBE PASAR, PODRIA SER, A UN TEXTBOX MULTILINEA	
                String ComandoATID;
                ComandoATID = "AT+VCID=1";
                ComPort.Write(ComandoATID + '\r');
    
            }
    
            private void InitializeComPort(string port, int baud)
            {	
                ComPort = new SerialPort(port, baud);	
                // ComPort.PortName = port;	
                // ComPort.BaudRate = baud;	
                ComPort.Parity = Parity.None;	
                ComPort.StopBits = StopBits.One;	
                ComPort.DataBits = 8;	
                ComPort.Handshake = Handshake.None;	
                ComPort.DataReceived += OnSerialDataReceived;	
                ComPort.Open();
            }
    
            public void OnSerialDataReceived(object sender, SerialDataReceivedEventArgs args)
            {	
                //SE ALMACENA EL EVENTO ACTUAL DEL PUERTO EN LA VARIABLE DATA	
                string data = ComPort.ReadExisting();	
                string numero = "";	
    
                //SACAMOS LOS DATOS DEL NUMERO TELEFONICO	
                if (data.Length >= 30)	
                {		
                    numero = data.Substring(29,10);		
                    //ESTE DATO ES EL QUE NECESITO QUE SE MUESTRE EN TEXTBOX		
    
                    Invoke(textoNumero, "El numero es: " + numero);
                }
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                ComPort.Write(textBox1.Text + '\r');
            }
    
            public void EscribeNumero(string texto)
            {
                 textBox2.Text = texto;
            }
        }
    }

    Los métodos _Load y _Click deben ser mapeados a sus respectivos eventos, sino no funcionan.
    • Editado sopita martes, 5 de agosto de 2014 11:42
    • Marcado como respuesta Casper_nk martes, 5 de agosto de 2014 21:50
    martes, 5 de agosto de 2014 11:40

Todas las respuestas

  • El mensaje original debió pegarse en el foro del lenguaje C#.

    using System;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            SerialPort ComPort; 
            ASCIIEncoding ASCIIEncoder = new ASCIIEncoding();
    
            public delegate void EscribeTexto(string texto);
            private EscribeTexto textoNumero;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                string[] args = Environment.GetCommandLineArgs();
    
                string port = "COM3";
                int baud = 9600;
                if (args.Length > 1)
                { port = args[1]; }
                if (args.Length > 2)
                { baud = int.Parse(args[2]); }
    
                InitializeComPort(port, baud);
    
                textoNumero = EscribeNumero;
     
                //ACTIVAR IDENTIFICADOR DE LLAMADAS...	
                //ESTO SE DEBE PASAR, PODRIA SER, A UN TEXTBOX MULTILINEA	
                String ComandoATID;
                ComandoATID = "AT+VCID=1";
                ComPort.Write(ComandoATID + '\r');
    
            }
    
            private void InitializeComPort(string port, int baud)
            {	
                ComPort = new SerialPort(port, baud);	
                // ComPort.PortName = port;	
                // ComPort.BaudRate = baud;	
                ComPort.Parity = Parity.None;	
                ComPort.StopBits = StopBits.One;	
                ComPort.DataBits = 8;	
                ComPort.Handshake = Handshake.None;	
                ComPort.DataReceived += OnSerialDataReceived;	
                ComPort.Open();
            }
    
            public void OnSerialDataReceived(object sender, SerialDataReceivedEventArgs args)
            {	
                //SE ALMACENA EL EVENTO ACTUAL DEL PUERTO EN LA VARIABLE DATA	
                string data = ComPort.ReadExisting();	
                string numero = "";	
    
                //SACAMOS LOS DATOS DEL NUMERO TELEFONICO	
                if (data.Length >= 30)	
                {		
                    numero = data.Substring(29,10);		
                    //ESTE DATO ES EL QUE NECESITO QUE SE MUESTRE EN TEXTBOX		
    
                    Invoke(textoNumero, "El numero es: " + numero);
                }
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                ComPort.Write(textBox1.Text + '\r');
            }
    
            public void EscribeNumero(string texto)
            {
                 textBox2.Text = texto;
            }
        }
    }

    Los métodos _Load y _Click deben ser mapeados a sus respectivos eventos, sino no funcionan.
    • Editado sopita martes, 5 de agosto de 2014 11:42
    • Marcado como respuesta Casper_nk martes, 5 de agosto de 2014 21:50
    martes, 5 de agosto de 2014 11:40
  • MUCHAS GRACIAS sopita funcionó a la PERFECCIÓN... solo que lo que está en el evento click lo moví al evento OnSerialDataReceived para que automaticamente me mandara el número que está llamando sin necesidad de darle click...

    por cierto que yo recuerdo haber puesto el tema en C#, pero pues obvio que no lo hice... una disculpa y de nuevo MUCHAS GRACIAS sopita...

    Saludos!!!


    Casper

    martes, 5 de agosto de 2014 21:50