Preguntar antes de salir

Iniciado por Meta, 29 Julio 2020, 17:12 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

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 (csharp) [Seleccionar]
                            Si pulso X con el ratón
                            {
                                Puerto_serie.Write("Puerto y aplicación cerrado."); // Enviar mensaje.
                                Puerto_serie.Close(); // Cierra el puerto serie.
                                Environment.Exit(0); // Cerrar aplicación.
                            }


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 (csharp) [Seleccionar]
                                Puerto_serie.Write("Puerto y aplicación cerrado."); // Enviar mensaje.
                                Puerto_serie.Close(); // Cierra el puerto serie.
                                Environment.Exit(0); // Cerrar aplicación.


Código ejemplo casi completo.
Código (csharp) [Seleccionar]
using System;
using System.IO.Ports;

namespace Introducir_datos_puerto_serie_consola_01
{
    class Program
    {
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Enviar datos al puerto serie";

            // Tamaño de la ventana, x, y.
            Console.SetWindowSize(70, 25);

            // Color de fondo.
            Console.BackgroundColor = ConsoleColor.Blue;

            // Color de las letras.
            Console.ForegroundColor = ConsoleColor.Yellow;

            // Limpiar pantalla y dejarlo todo gris.
            Console.Clear();

            // Visible el cursor.
            Console.CursorVisible = true;

            // Cree un nuevo objeto SerialPort con la configuración predeterminada.
            SerialPort Puerto_serie = new SerialPort("COM3");

            Puerto_serie.BaudRate = 115200;
            Puerto_serie.Parity = Parity.None;
            Puerto_serie.StopBits = StopBits.One;
            Puerto_serie.DataBits = 8;
            Puerto_serie.Handshake = Handshake.None;
            Puerto_serie.RtsEnable = true;

            // Establecer los tiempos de espera de lectura / escritura.
            Puerto_serie.ReadTimeout = 500; // Milisegundos.
            Puerto_serie.WriteTimeout = 500;

            // Detecta cualquier dato recibido.
            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

            Puerto_serie.Open(); // Abrir puerto.

            //Console.CursorSize = 1;

            do
            {
                Console.Write("Introduzca un texto: ");
                string texto;
                texto = Console.ReadLine();
                Console.WriteLine("El texto introducido es: " + texto);

                //texto = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
                Puerto_serie.Write(texto); // Envía los datos del string todo su contenido.
                Console.WriteLine("Comando {0} enviado.", texto); // Muestra en pantalla comandos enviado.
                Console.WriteLine();

                // ################ Pregunta aquí si quieres salir.   ################
                            //Si pulso X con el ratón
                            //{
                            //    Puerto_serie.Write("Puerto y aplicación cerrado."); // Enviar mensaje.
                            //    Puerto_serie.Close(); // Cierra el puerto serie.
                            //    Environment.Exit(0); // Cerrar aplicación.
                            //}
                // #####################################################################

            } while (true);


        }

        // Detecta cualquier dato entrante.
        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
            Console.WriteLine("Datos recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.
        }
    }
}


Gracias camaradas.

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

ThunderCls

#1
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
-[ "...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

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 (csharp) [Seleccionar]
                                Puerto_serie.Write("Puerto y aplicación cerrado."); // Enviar mensaje.
                                Puerto_serie.Close(); // Cierra el puerto serie.


Eso lo prefiero más y no tanto rollo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/