只有在64位PC上运行程序时,才会在C#的串口上产生很多噪音

时间:2013-07-27 06:02:44

标签: c#

我为我的英语道歉。

我正在C#中构建一个与串口配合使用的应用程序。 我使用DataReceived事件来捕获发送hadware外部的数据,在事件处理程序DataReceived中我使用方法ReadExisting来捕获外部硬件发送的数据。

当我使用32位计算机测试应用程序时,一切都很顺利,但是当我使用64位计算机进行测试时,大约每200或400毫秒触发事件DataReceived并返回由方法ReadExisting有很多问号(?????????????)

Nota:para la comunicacion del hadware externo con el pc,yo utilizo conversor de puerto serial a usb == [Conversor] http://www.twistedtienda.com/images/prod/usbrs232-1.jpg

这是我用来创建com端口的方法:

private void CrearPuerto()
{
    if (srpComunicacion == null)
    {
   srpComunicacion = new System.IO.Ports.SerialPort();
   srpComunicacion.BaudRate = Globales.BaudiosPuertoCom;
   srpComunicacion.Parity = System.IO.Ports.Parity.None;
   srpComunicacion.DiscardNull = false;
   srpComunicacion.StopBits = System.IO.Ports.StopBits.One;
   srpComunicacion.DataBits = 8;
   srpComunicacion.DtrEnable = false;
   srpComunicacion.ParityReplace = 63;
   srpComunicacion.ReadBufferSize = 4096;
   srpComunicacion.ReadTimeout = 3000;
   srpComunicacion.ReceivedBytesThreshold = 4;
   srpComunicacion.RtsEnable = false;
   srpComunicacion.WriteBufferSize = 2048;
   srpComunicacion.WriteTimeout = -1;
   srpComunicacion.Handshake = System.IO.Ports.Handshake.None;
   srpComunicacion.DataReceived +=(a,b)=>{
                System.IO.Ports.SerialPort srp = ((System.IO.Ports.SerialPort)a);
                if ( System.Threading.Monitor.TryEnter(srp,1000) )
                {
                    try
                    {
                        DatosImpresion d = new GenerarTurno().GenerarTurno1(((System.IO.Ports.SerialPort)a).ReadExisting(), true);
                        if (d != null && Globales.MostrarNotificacion[Globales.MostrarNotificacion.Length - 1])
                            notifyIcon1.ShowBalloonTip(10000, "Informacion del Turno Generado", "Turno " + d.Turno + " del Grupo " + d.Grupo + "\r\nRango : " + d.RangoIni + " - " + d.RangoFin + "\r\nTurnos en Espera : " + d.TurnoEspera + "\r\nTaquillas Principales : " + d.Taquillas, ToolTipIcon.Info);
                    }
                    catch (Exception ex)
                    {
                        try
                        {
                            bool errorDeRed = ex.ErrorDeRedToString();
                            if (ex.GetType().Name.ToLower().Equals("exception") || errorDeRed)
                            {
                                PrintDocument pr = new PrintDocument();
                                pr.PrinterSettings.PrinterName = Globales.RutaImpresora;
                                if (pr.PrinterSettings.IsValid)
                                {
                                    RawPrinterHelper.SendStringToPrinter(Globales.RutaImpresora, (errorDeRed ? string.Format(Globales.ErrorRed, DateTime.Now.ToLongDateString(), DateTime.Now.ToShortTimeString()) : ex.Message));
                                    pr.Print();
                                }
                            }
                        }
                        catch (Exception exc) { ex = new Exception(ex.ToString(), exc); }
                        Herramientas.Genericas.AdminErrores.GenerarLogErrores("srpComunicacion_DataReceived -- " + ex.ToString());
                    }
                    finally
                    {
                        System.Threading.Monitor.Exit(srp);
                    }
                }
                if (++recolectar >= 10)
                {
                    recolectar = 0;
                    ClsGenerica.ForzarRecolector();
                    Application.DoEvents();
                }
            };
        }

0 个答案:

没有答案