foreach (DictionaryEntry item in m_serialport)
{
SerialPort serialport = (SerialPort)item.Value;
if (serialport.IsOpen)
{
serialport.Close();
}
}
string[] ports = SerialPort.GetPortNames();
for (int i = 0; i
{
SerialPort serialport = new SerialPort();
serialport.PortName = ports[i];
serialport.Open();
serialport.ReadExisting();
serialport.DataReceived += new SerialDataReceivedEventHandler(m_serialport_DataReceived);
m_serialport.Add(ports[i], serialport);
}
public void m_serialport_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort serialport = (SerialPort)sender;
int num = serialport.BytesToRead;
if (num ==8)
{
Byte[] mybyte = new Byte[num];
serialport.Read(mybyte, 0, num);
}
}
--------------------------------------------------------------------------------
我的程序是用来读一种串口键盘的,每按一次键盘,有8位的数据,所以 num ==8
--------------------------------------------------------------------------------
using System;
using System.Runtime.InteropServices;
using System.IO;
namespace Common
{
///
/// POSPrinter 的摘要说明。
///
public class POSPrinter
{
const int OPEN_EXISTING = 3;
string prnPort ="COM1";
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr CreateFile(string lpFileName,
int dwDesiredAccess,
int dwShareMode,
int lpSecurityAttributes,
int dwCreationDisposition ,
int dwFlagsAndAttributes ,
int hTemplateFile);
public POSPrinter()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public POSPrinter(string prnPort)
{
this.prnPort=prnPort;//打印机端口
}
public string PrintLine(string str)
{
IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0);
if(iHandle.ToInt32() == -1)
{
return "打开COM1失败";
}
else
{
FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
//sw.WriteLine(str)//写数据
//开钱箱
sw.Write(((char)27).ToString()+"p"+((char)0).ToString()+((char)60).ToString()+((char)255).ToString());
sw.Close();
fs.Close();
return "";
}
}
}
}