elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Preguntar antes de salir
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Preguntar antes de salir  (Leído 244 veces)
Meta


Desconectado Desconectado

Mensajes: 3.194



Ver Perfil WWW
Preguntar antes de salir
« en: 29 Julio 2020, 17:12 »

Buenas:

Tengo un programa hecho a medias. Está hecho con la consola C#.

Al pulsar la X de la ventana, quiero que haga estas cosas.
Pregunta si realmente quiero salir, si salgo, pone esto.

Código
  1.                            Si pulso X con el ratón
  2.                            {
  3.                                Puerto_serie.Write("Puerto y aplicación cerrado."); // Enviar mensaje.
  4.                                Puerto_serie.Close(); // Cierra el puerto serie.
  5.                                Environment.Exit(0); // Cerrar aplicación.
  6.                            }

Arriaba está mal planteado.

Primero pregunta si quiero salir, con un Sí y un No, si pulso No, el programa sigue su curso, si pongo Si, cierra el programa y me envía estos datos al puerto serie antes de que cierre del todo.

Código
  1.                                Puerto_serie.Write("Puerto y aplicación cerrado."); // Enviar mensaje.
  2.                                Puerto_serie.Close(); // Cierra el puerto serie.
  3.                                Environment.Exit(0); // Cerrar aplicación.

Código ejemplo casi completo.
Código
  1. using System;
  2. using System.IO.Ports;
  3.  
  4. namespace Introducir_datos_puerto_serie_consola_01
  5. {
  6.    class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            // Título de la ventana.
  11.            Console.Title = "Enviar datos al puerto serie";
  12.  
  13.            // Tamaño de la ventana, x, y.
  14.            Console.SetWindowSize(70, 25);
  15.  
  16.            // Color de fondo.
  17.            Console.BackgroundColor = ConsoleColor.Blue;
  18.  
  19.            // Color de las letras.
  20.            Console.ForegroundColor = ConsoleColor.Yellow;
  21.  
  22.            // Limpiar pantalla y dejarlo todo gris.
  23.            Console.Clear();
  24.  
  25.            // Visible el cursor.
  26.            Console.CursorVisible = true;
  27.  
  28.            // Cree un nuevo objeto SerialPort con la configuración predeterminada.
  29.            SerialPort Puerto_serie = new SerialPort("COM3");
  30.  
  31.            Puerto_serie.BaudRate = 115200;
  32.            Puerto_serie.Parity = Parity.None;
  33.            Puerto_serie.StopBits = StopBits.One;
  34.            Puerto_serie.DataBits = 8;
  35.            Puerto_serie.Handshake = Handshake.None;
  36.            Puerto_serie.RtsEnable = true;
  37.  
  38.            // Establecer los tiempos de espera de lectura / escritura.
  39.            Puerto_serie.ReadTimeout = 500; // Milisegundos.
  40.            Puerto_serie.WriteTimeout = 500;
  41.  
  42.            // Detecta cualquier dato recibido.
  43.            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
  44.  
  45.            Puerto_serie.Open(); // Abrir puerto.
  46.  
  47.            //Console.CursorSize = 1;
  48.  
  49.            do
  50.            {
  51.                Console.Write("Introduzca un texto: ");
  52.                string texto;
  53.                texto = Console.ReadLine();
  54.                Console.WriteLine("El texto introducido es: " + texto);
  55.  
  56.                //texto = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
  57.                Puerto_serie.Write(texto); // Envía los datos del string todo su contenido.
  58.                Console.WriteLine("Comando {0} enviado.", texto); // Muestra en pantalla comandos enviado.
  59.                Console.WriteLine();
  60.  
  61.                // ################ Pregunta aquí si quieres salir.   ################
  62.                            //Si pulso X con el ratón
  63.                            //{
  64.                            //    Puerto_serie.Write("Puerto y aplicación cerrado."); // Enviar mensaje.
  65.                            //    Puerto_serie.Close(); // Cierra el puerto serie.
  66.                            //    Environment.Exit(0); // Cerrar aplicación.
  67.                            //}
  68.                // #####################################################################
  69.  
  70.            } while (true);
  71.  
  72.  
  73.        }
  74.  
  75.        // Detecta cualquier dato entrante.
  76.        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
  77.        {
  78.            SerialPort sp = (SerialPort)sender;
  79.            string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
  80.            Console.WriteLine("Datos recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.
  81.        }
  82.    }
  83. }
  84.  

Gracias camaradas.

Saludos.


En línea

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/
ThunderCls


Desconectado Desconectado

Mensajes: 417


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Preguntar antes de salir
« Respuesta #1 en: 29 Julio 2020, 18:28 »

Necesitas interceptar el evento del cierre de tu consola con SetConsoleCtrlHandler

https://stackoverflow.com/questions/474679/capture-console-exit-c-sharp

NOTA: Ten en cuenta que otro evento que no sea CTRL+C no es posible cancelarlo


« Última modificación: 29 Julio 2020, 18:31 por ThunderCls » En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Meta


Desconectado Desconectado

Mensajes: 3.194



Ver Perfil WWW
Re: Preguntar antes de salir
« Respuesta #2 en: 30 Julio 2020, 05:33 »

Bueno:

Para no estar con tanto jaleo.

Mejor una cosa más fácil.

Sin preguntar nada al salir del programa, solo que antes de salir, indique el programa enviar un mensaje al puerto serie y luego cierra el puerto.

Código
  1.                                Puerto_serie.Write("Puerto y aplicación cerrado."); // Enviar mensaje.
  2.                                Puerto_serie.Close(); // Cierra el puerto serie.

Eso lo prefiero más y no tanto rollo.
En línea

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
preguntar
Java
erickool 1 1,415 Último mensaje 31 Marzo 2010, 03:42
por 1mpuls0
[Debate] Dios o Bin Bang(¿Qué había antes del antes?) « 1 2 3 4 5 »
Foro Libre
Senior++ 49 15,277 Último mensaje 26 Diciembre 2011, 00:57
por reagea
"Hackean" las gafas de Google antes de salir al mercado...
Noticias
The_Mushrr00m 4 1,949 Último mensaje 28 Abril 2013, 10:47
por BlackM4ster
Un error de software dejó salir antes a presos del estado de Washington en ...
Noticias
wolfbcn 0 270 Último mensaje 24 Diciembre 2015, 02:08
por wolfbcn
Thor Ragnarok se filtra para descargar 1 mes antes de salir en Blu-ray
Noticias
wolfbcn 0 387 Último mensaje 22 Enero 2018, 15:18
por wolfbcn
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines