C#SerialPort.Write()方法的误解
Misunderstanding of C# SerialPort.Write() method
我的任务是通过代码将输入数据发送到串口。我使用 .NET Framework 4 客户端配置文件。我有一个成功处理来自扫描仪的数据的示例,我想以编程方式对此进行模拟。似乎 C# SerialPort.Write() 适合于此,但 port_DataReceived 处理程序不执行任何操作:
namespace ConsoleApplication_ReadTabel
{
class SerialPortProgram
{
private SerialPort port;
string input = "";
[STAThread]
static void Main(string[] args)
{
new SerialPortProgram();
}
private SerialPortProgram()
{
port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
Console.WriteLine("Incoming Data:");
port.DataReceived += new
SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
port.Write("ghghgh");
Console.Read();
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
input = port.ReadLine();
Console.WriteLine(input);
Console.WriteLine("----");
}
}
}
问题是Console.Read();
你可以试试这个
namespace ConsoleApplication_ReadTabel
{
class SerialPortProgram
{
private SerialPort port;
string input = "";
[STAThread]
static void Main(string[] args)
{
new SerialPortProgram();
}
private SerialPortProgram()
{
port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
Console.WriteLine("Incoming Data:");
port.DataReceived += new
SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
port.Write("ghghgh");
Console.Read();//when program is waiting here, send something the port and continue
Thread.Sleep(5000);
Console.Read();
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
input = port.ReadLine();
Console.WriteLine(input);
Console.WriteLine("----");
}
}
}
Kunif is right. We can't write and read simultaneously at the same port via code (at least by using .NET Framework 4). So decision is to use free software com0com 用于在 2 个虚拟端口之间创建连接。第一个调用 write() 方法,第二个处理输入信号。
class SerialPortProgram
{
private SerialPort port, port2;
[STAThread]
static void Main(string[] args)
{
new SerialPortProgram();
}
private SerialPortProgram()
{
port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
port.Open();
port2 = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
port2.DataReceived += new SerialDataReceivedEventHandler(port2_DataReceived);
port2.Open();
port.Write("Hello!");
Console.Read();
}
void port2_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine("COM4 incoming data:");
Thread.Sleep(300);
string inp = port2.ReadExisting();
Console.WriteLine(inp);
Console.WriteLine("----");
}
}
我的任务是通过代码将输入数据发送到串口。我使用 .NET Framework 4 客户端配置文件。我有一个成功处理来自扫描仪的数据的示例,我想以编程方式对此进行模拟。似乎 C# SerialPort.Write() 适合于此,但 port_DataReceived 处理程序不执行任何操作:
namespace ConsoleApplication_ReadTabel
{
class SerialPortProgram
{
private SerialPort port;
string input = "";
[STAThread]
static void Main(string[] args)
{
new SerialPortProgram();
}
private SerialPortProgram()
{
port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
Console.WriteLine("Incoming Data:");
port.DataReceived += new
SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
port.Write("ghghgh");
Console.Read();
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
input = port.ReadLine();
Console.WriteLine(input);
Console.WriteLine("----");
}
}
}
问题是Console.Read(); 你可以试试这个
namespace ConsoleApplication_ReadTabel
{
class SerialPortProgram
{
private SerialPort port;
string input = "";
[STAThread]
static void Main(string[] args)
{
new SerialPortProgram();
}
private SerialPortProgram()
{
port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
Console.WriteLine("Incoming Data:");
port.DataReceived += new
SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
port.Write("ghghgh");
Console.Read();//when program is waiting here, send something the port and continue
Thread.Sleep(5000);
Console.Read();
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
input = port.ReadLine();
Console.WriteLine(input);
Console.WriteLine("----");
}
}
}
Kunif is right. We can't write and read simultaneously at the same port via code (at least by using .NET Framework 4). So decision is to use free software com0com 用于在 2 个虚拟端口之间创建连接。第一个调用 write() 方法,第二个处理输入信号。
class SerialPortProgram
{
private SerialPort port, port2;
[STAThread]
static void Main(string[] args)
{
new SerialPortProgram();
}
private SerialPortProgram()
{
port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
port.Open();
port2 = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
port2.DataReceived += new SerialDataReceivedEventHandler(port2_DataReceived);
port2.Open();
port.Write("Hello!");
Console.Read();
}
void port2_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine("COM4 incoming data:");
Thread.Sleep(300);
string inp = port2.ReadExisting();
Console.WriteLine(inp);
Console.WriteLine("----");
}
}