我为我的英语道歉。
我正在构建一个C#
与串行端口一起使用的应用程序。我使用DataReceived
事件来捕获向外部发送硬件的数据,在事件处理程序中DataReceived
我使用该方法ReadExisting
来捕获外部硬件发送的数据。
当我用 32 位计算机测试应用程序时,一切都很顺利,但是当我用 64 位计算机测试它时,大约每 200 或 400 毫秒 DataReceived
触发一次事件并且该方法返回的数据ReadExisting
很多,问号(? ????????????)
注意: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();
}
};
}