Эта программа предназначена для открытия двух COM-портов и отправки данных от одного к другому за 1 секунду. Пользователь вводит, какой порт передает и какой порт получает. Проблема, с которой я столкнулась, связана с ElapsedEventHandler() в функции OnTimedEvent(), которая имеет два аргумента по умолчанию. Я хочу, чтобы функция OnTimedEvent() записывала что-то на порт отправки и читала ее на приемном порту, а затем отображала ее на консоли. Очевидно, что мой код не будет работать так, как сейчас, потому что порты и сообщения не входят в область OnTimedEvent(). Что я могу сделать, чтобы эта функция работала так, как я хочу? Заранее спасибо.Передача аргументов в 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);
}
}
Лучшее, что вы можете сделать, это узнать ООП, ваш код выглядит 20 лет. Оберните операции порта в классе, оберните таймер в классе, который имеет два порта в качестве свойств и вуаля - у вас есть нужные вам объекты там, где они вам нужны. Ключевое слово - «объекты». –