이 프로그램은 두 개의 COM 포트를 열어 하나에서 다른 하나까지 1 초 동안 데이터를 보내도록 설계되었습니다. 사용자는 어느 포트가 송신하고 어느 포트가 수신 하는지를 입력한다. 내가 가지고있는 문제는 ElapsedEventHandler()가 두 개의 기본 인수가있는 OnTimedEvent() 함수를 사용하는 것입니다. OnTimedEvent() 함수가 송신 포트에 무언가를 쓰고 수신 포트에서 읽은 다음 콘솔에 표시하려고합니다. 분명히 내 코드는 포트와 메시지가 OnTimedEvent()의 범위에 없기 때문에 지금 가지고있는 방식대로 작동하지 않습니다. 그 기능을 내가 원하는대로 작동하게하려면 어떻게해야합니까? 미리 감사드립니다. 내가 대신 System.Threading.Timer
을 사용하는 것이 좋습니다ElapsedEventHandler에 인수 전달 C#
using System;
using System.IO.Ports;
using System.Timers;
public class serial_test1
{
public static void Main(string[] args)
{
string sender;
string recver;
string buff_out;
string message;
SerialPort send_port;
SerialPort recv_port;
if (args.Length == 1)
{
sender = "UART";
recver = "USB";
message = args[0];
}
else if (args.Length == 2)
{
sender = args[0];
message = args[1];
if (sender == "USB")
{
recver = "UART";
}
else
{
recver = "USB";
}
}
else
{
sender = "UART";
recver = "USB";
message = "TEST MESSAGE";
}
int baud = 115200;
int data_bits = 8;
Parity parity = Parity.None;
StopBits stop_bits = StopBits.One;
buff_out = message;
SerialPort UARTport = new SerialPort("COM1", baud, parity, data_bits, stop_bits);
SerialPort USBport = new SerialPort("COM7", baud, parity, data_bits, stop_bits);
UARTport.Open();
USBport.Open();
if (sender == "USB")
{
send_port = USBport;
recv_port = UARTport;
}
if (sender == "UART")
{
send_port = UARTport;
recv_port = USBport;
}
string header = "from " + sender + " port to " + recver + " port";
Console.WriteLine(header);
Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 1 second.
aTimer.Interval = 1000;
aTimer.Enabled = true;
UARTport.Close();
USBport.Close();
Console.ReadLine();
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
string buff_in;
send_port.WriteLine(buff_out);
buff_in = recv_port.ReadLine();
Console.WriteLine(buff_in);
}
}
당신이 할 수있는 가장 좋은 일은 OOP를 배우는 것입니다. 코드는 20 세가됩니다. 클래스에서 포트 연산을 랩핑하고, 두 개의 포트가있는 클래스에 타이머를 랩핑하고 속성으로 처리합니다. 필요한 곳에 필요한 객체가 있습니다. 키워드는'objects'입니다. –