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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


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


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Poner un timer de 10 segundos
« en: 19 Noviembre 2023, 09:02 am »

Hola:

He hecho un formulario Windows Form en el cual envía este comando por cada 10 segundos.

Desde que ejecute el programa envía el comando.
Código
  1. serialPort1.Write("B\r");

No se como usar adecuadamente que el timer me funcione por cada 10 segundos, es decir, que por cada 10 segundos que pase, me envíe el comando.

Lo que pasa que si lo envía cada cierto tiempo, en muy poco tiempo, el dispositivo de cuelga y no devuelve nada.

Código completo C#.
Código
  1. using System;
  2. using System.IO.Ports;
  3. using System.Threading;
  4. using System.Windows.Forms;
  5.  
  6. namespace Balanza_Puerto_serie
  7. {
  8.    public partial class Form1 : Form
  9.    {
  10.        private delegate void DelegadoAcceso(String accion);
  11.        public Form1()
  12.        {
  13.            InitializeComponent();
  14.        }
  15.  
  16.        private void Form1_Load(object sender, EventArgs e)
  17.        {
  18.            try
  19.            {
  20.                serialPort1 = new SerialPort("COM1", 2400, Parity.None, 8, StopBits.One);
  21.                serialPort1.Handshake = Handshake.None;
  22.                serialPort1.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
  23.                serialPort1.ReadTimeout = 500;
  24.                serialPort1.WriteTimeout = 500;
  25.                serialPort1.Open();
  26.                serialPort1.Write("B\r");
  27.            }
  28.            catch(Exception ex)
  29.            {
  30.                MessageBox.Show(ex.Message);
  31.            }
  32.        }
  33.  
  34.        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
  35.        {
  36.            if(this.Enabled == true)
  37.            {
  38.                Thread.Sleep(500);
  39.                string data = serialPort1.ReadExisting();
  40.                this.BeginInvoke(new DelegadoAcceso(si_DataReceived), new object[] {data});
  41.                serialPort1.Write("B\r"); // Envía comando.
  42.            }
  43.        }
  44.  
  45.        private void si_DataReceived(string accion)
  46.        {
  47.            label2.Text = accion;
  48.        }
  49.    }
  50. }


En línea

elektrostudios2

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: Poner un timer de 10 segundos
« Respuesta #1 en: 21 Febrero 2024, 10:07 am »

¿Dónde está el Timer?. Si por Timer te refieres a esto: Thread.Sleep(500), eso no es lo que se denomina Timer en el contexto de .NET, sino simplemente una suspensión arbitraria de la ejecución del hilo durante un período de tiempo determinado.

Un Timer es una clase (System.Timers.Timer y System.Windows.Forms.Timer) que te permite establecer un intervalo (en tu caso, sería de 10 segundos) mediante la propiedad Timer.Interval, y pasado ese intervalo se disparará el evento Timer.Elapsed que puedes controlar para enviar el "comando" al puerto serial.

El modo de empleo y los nombres de sus miembros difieren en función de la clase que escojas utilizar, pero ambas te permitirán lograr el mismo objetivo. Ya que estás usando Windows Forms, te convendría usar la clase System.Windows.Forms.Timer.

Aténtamente,
Elektro.


« Última modificación: 21 Febrero 2024, 10:19 am por elektrostudios2 » En línea

   
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
timer en php
PHP
Mr.Chispa 2 3,434 Último mensaje 4 Octubre 2006, 16:49 pm
por Mr.Chispa
contador en segundos? timer?
Programación Visual Basic
markx 9 2,656 Último mensaje 3 Septiembre 2007, 05:07 am
por HaDeS, -
por que no puedo poner un label al poner un skin?
Programación Visual Basic
Senior++ 4 6,023 Último mensaje 13 Junio 2011, 21:17 pm
por Senior++
Poner timer en horas o minutos?
Programación Visual Basic
TheJucas21 1 2,103 Último mensaje 28 Julio 2014, 03:55 am
por MCKSys Argentina
Timer en C#
.NET (C#, VB.NET, ASP)
Fixxed 1 2,466 Último mensaje 22 Marzo 2016, 07:59 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines