1.用c#编写一个控制台程序,列出计算机上可用的串口,并能够选择要用的串口,波特率配置成9600,8,n,1,能够进行接受和发送字符串。
2.添加依赖项


3.程序
using system;
using system.io.ports;
using system.text;
using system.threading;
namespace serialportterminal
{
class program
{
private static serialport _serialport;
private static bool _continue = true;
static void main(string[] args)
{
console.title = "串口通信终端";
console.outputencoding = encoding.utf8;
console.inputencoding = encoding.utf8;
try
{
// 列出可用串口
console.writeline("可用的串口列表:");
string[] ports = serialport.getportnames();
if (ports.length == 0)
{
console.writeline("未找到可用串口。按任意键退出...");
console.readkey();
return;
}
for (int i = 0; i < ports.length; i++)
{
console.writeline($"{i + 1}. {ports[i]}");
}
// 选择串口
int selectedindex = -1;
while (selectedindex < 0 || selectedindex >= ports.length)
{
console.write($"\n请选择串口 (1-{ports.length}): ");
if (int.tryparse(console.readline(), out int input) && input > 0 && input <= ports.length)
{
selectedindex = input - 1;
}
else
{
console.writeline("无效的选择,请重新输入。");
}
}
string selectedport = ports[selectedindex];
console.writeline($"已选择: {selectedport}");
// 创建并配置串口
_serialport = new serialport(selectedport)
{
baudrate = 9600,
parity = parity.none,
databits = 8,
stopbits = stopbits.one,
handshake = handshake.none,
readtimeout = 500,
writetimeout = 500,
encoding = encoding.utf8
};
// 设置数据接收事件处理
_serialport.datareceived += serialportdatareceived;
// 打开串口
_serialport.open();
console.writeline("串口已打开,配置: 9600,8,n,1");
console.writeline("输入要发送的文本 (输入 'exit' 退出):");
console.writeline("---------------------------------");
// 启动发送线程
thread writethread = new thread(write);
writethread.isbackground = true;
writethread.start();
// 等待退出
while (_continue)
{
thread.sleep(100);
}
// 关闭串口
if (_serialport.isopen)
{
_serialport.close();
}
console.writeline("串口已关闭。");
}
catch (exception ex)
{
console.writeline($"错误: {ex.message}");
console.writeline("按任意键退出...");
console.readkey();
}
}
private static void serialportdatareceived(object sender, serialdatareceivedeventargs e)
{
try
{
serialport sp = (serialport)sender;
string data = sp.readexisting();
if (!string.isnullorempty(data))
{
console.write($"[接收] {data}");
}
}
catch (exception ex)
{
console.writeline($"接收错误: {ex.message}");
}
}
private static void write()
{
while (_continue)
{
try
{
string message = console.readline();
if (message?.tolower() == "exit")
{
_continue = false;
return;
}
if (_serialport != null && _serialport.isopen)
{
_serialport.writeline(message);
console.writeline($"[发送] {message}");
}
}
catch (exception ex)
{
console.writeline($"发送错误: {ex.message}");
}
}
}
}
}4.结果

到此这篇关于c#编写一个控制台程序的实现示例的文章就介绍到这了,更多相关c#编写控制台程序内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论