私の英語で申し訳ありません。
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();
}
};
}