Avatar billede microjet Nybegynder
17. juni 2008 - 16:13 Der er 3 kommentarer og
1 løsning

Problem med brug af Timere

Jeg skal bruge en timer til at udføre noget kode i baggrunden, men jeg kan ikke "create" timeren... der meldes fejl alle steder hvor der står timer1. Jeg vil gerne oprette timeren i constructoren, så koden køre i baggrunden med det samme

Her er koden: (find: //************************* )


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
using MultiplexClassLibrary;
using DeviceClassLibrary;

namespace ComPortClassLibrary
{
    public class HBComPort
    {
        //HBDataPacket datapacket = new HBDataPacket();
        public delegate void ComportDataDelegate(object sender, string Data);//delegate til event
        public event ComportDataDelegate NewComportData;// event af typen ComportDataDelegate

        // The main control for communicating through the RS-232 port
        private SerialPort comport = new SerialPort();



        //Constructor for ComPortClassLibrary
        public HBComPort()
        {
            // If the port is open, close it.
            if (comport.IsOpen) comport.Close();
            else
            {
                comport.PortName = "COM1";
                comport.BaudRate = 9600;
                comport.DataBits = 8;
                comport.StopBits = StopBits.One;
                comport.Handshake = Handshake.None;
                comport.Parity = Parity.None;

                // Set the read/write timeouts
                comport.ReadTimeout = 500;
                comport.WriteTimeout = 500;
                comport.Open();
            }

            // When data is recieved through the port, call this method
            comport.DataReceived += new SerialDataReceivedEventHandler(ComportDataRecieved);


         
         
            //***********************
            timer1 = new Timer();
            timer1.Interval = 100;
            timer1.Enabled = true;
            timer1.Tick += new System.EventHandler(OnTimerEvent);

            //************************
        }
        public void OnTimerEvent(object source, EventArgs e)
        {
            timer1.Enabled = false;
            Thread.Sleep(5000);
            comport.Write("ID\r");
            timer1.Enabled = true;
        }
Avatar billede bitmatic Nybegynder
17. juni 2008 - 16:54 #1
Prøv med:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
using MultiplexClassLibrary;
using DeviceClassLibrary;

namespace ComPortClassLibrary
{
    public class HBComPort
    {
        //HBDataPacket datapacket = new HBDataPacket();
        public delegate void ComportDataDelegate(object sender, string Data);//delegate til event
        public event ComportDataDelegate NewComportData;// event af typen ComportDataDelegate

        // The main control for communicating through the RS-232 port
        private SerialPort comport = new SerialPort();
        private Timer timer1 = new Timer();



        //Constructor for ComPortClassLibrary
        public HBComPort()
        {
            // If the port is open, close it.
            if (comport.IsOpen) comport.Close();
            else
            {
                comport.PortName = "COM1";
                comport.BaudRate = 9600;
                comport.DataBits = 8;
                comport.StopBits = StopBits.One;
                comport.Handshake = Handshake.None;
                comport.Parity = Parity.None;

                // Set the read/write timeouts
                comport.ReadTimeout = 500;
                comport.WriteTimeout = 500;
                comport.Open();
            }

            // When data is recieved through the port, call this method
            comport.DataReceived += new SerialDataReceivedEventHandler(ComportDataRecieved);


       
       
            //***********************
            timer1.Interval = 100;
            timer1.Enabled = true;
            timer1.Tick += new System.EventHandler(OnTimerEvent);

            //************************
        }
        public void OnTimerEvent(object source, EventArgs e)
        {
            timer1.Enabled = false;
            Thread.Sleep(5000);
            comport.Write("ID\r");
            timer1.Enabled = true;
        }
Avatar billede microjet Nybegynder
18. juni 2008 - 10:17 #2
Nej det var ikke det der var problemet, men jeg manglede:

using System.Windows.Forms;

Men så konflikter "timer" med "timer" i

using System.Threading;

Derfor fik jeg det til at virke ved at skrive:

private System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();

Jeg ved ikke rigtig om der er en nemmere måde at gøre det på?





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
using MultiplexClassLibrary;
using DeviceClassLibrary;
using System.Windows.Forms;



namespace ComPortClassLibrary
{
    public class HBComPort
    {
        //HBDataPacket datapacket = new HBDataPacket();
        public delegate void ComportDataDelegate(object sender, string Data);//delegate til event
        public event ComportDataDelegate NewComportData;// event af typen ComportDataDelegate

        // The main control for communicating through the RS-232 port
        private SerialPort comport = new SerialPort();
        private System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();


        //Constructor for ComPortClassLibrary
        public HBComPort()
        {
            // If the port is open, close it.
            if (comport.IsOpen) comport.Close();
            else
            {
                comport.PortName = "COM1";
                comport.BaudRate = 9600;
                comport.DataBits = 8;
                comport.StopBits = StopBits.One;
                comport.Handshake = Handshake.None;
                comport.Parity = Parity.None;

                // Set the read/write timeouts
                comport.ReadTimeout = 500;
                comport.WriteTimeout = 500;
                comport.Open();
            }

            // When data is recieved through the port, call this method
            comport.DataReceived += new SerialDataReceivedEventHandler(ComportDataRecieved);


         
         
            //***********************
            timer1.Interval = 100;
            timer1.Enabled = true;
            timer1.Tick += new System.EventHandler(OnTimerEvent);

            //************************
        }
        public void OnTimerEvent(object source, EventArgs e)
        {
            timer1.Enabled = false;
            Thread.Sleep(5000);
            comport.Write("ID\r");
            timer1.Enabled = true;
        }
Avatar billede microjet Nybegynder
18. juni 2008 - 10:18 #3
Men ellers tak for hjælpen!
Avatar billede Syska Mester
18. juni 2008 - 22:10 #4
Hvis du laver en Console App ... så er det den forkerte Timer du bruger.

Og bitmatic har ret, du mangler en reference til en Timer, og det giver han dig.

Altså:
Timer timer = new Timer();

Og ja, der findes 2 timere ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I dag 10:28 PDFEngine Af barth i Andet software
I går 22:40 Butte indhold i celler Af lurup i Excel
I går 15:24 Power Query Af djsimonsen i Excel
I går 14:43 Hvis ikke på liste, tilføj værdier til liste Af TheLibrarian i Excel
I går 11:33 Windows 11 Af ranni i Windows