Hi,
Try this code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
namespace SerialTest
{
public partial class Form1 : Form
{
SerialPort m_comPort;
public Form1()
{
InitializeComponent();
m_cmbPortName.Items.Clear();
foreach (string s in SerialPort.GetPortNames())
{
m_cmbPortName.Items.Add(s);
}
m_cmbStopbits.DataSource =
System.Enum.GetValues(typeof(StopBits));
m_cmbParity.DataSource =
System.Enum.GetValues(typeof(Parity));
}
private void button1_Click(object sender, EventArgs e)
{
Send();
}
private void Send()
{
try
{
if (m_comPort.IsOpen)
{
int delay = Int32.Parse(m_txtDelay.Text);
if (delay > 0)
{
string cmd = m_txtSend.Text;
for (int i = 0; i < cmd.Length; i++)
{
m_comPort.Write(cmd[i].ToString());
Thread.Sleep(delay);
}
}
else
{
m_comPort.Write(m_txtSend.Text);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Exception while writing to COM: " +
ex.Message);
}
}
private void m_txtSend_TextChanged(object sender, EventArgs e)
{
//Send();
//m_txtSend.Clear();
}
private void m_btnOpen_Click(object sender, EventArgs e)
{
try
{
if (m_comPort != null)
{
if (m_comPort.IsOpen)
{
m_comPort.Close();
}
}
else
{
m_comPort = new SerialPort();
}
m_comPort.DataReceived += new
SerialDataReceivedEventHandler(port_DataReceived);
/// Port Name
m_comPort.PortName = m_cmbPortName.Text;
/// Baud Rate
m_comPort.BaudRate = Int32.Parse(m_txtBaud.Text);
/// Stop Bits
m_comPort.StopBits =
(StopBits)Enum.Parse(typeof(StopBits), m_cmbStopbits.Text);
/// Parity
m_comPort.Parity = (Parity)Enum.Parse(typeof(Parity),
m_cmbParity.Text);
/// Data Bits
m_comPort.DataBits = Int32.Parse(m_txtDatabits.Text);
/// Flow Control
m_comPort.Handshake = Handshake.RequestToSend;
m_comPort.RtsEnable = true;
//m_comPort.Encoding = Encoding.UTF8;
m_comPort.Open();
Log("Port successfully opened");
}
catch (Exception ex)
{
Log("Error while opening " + m_cmbPortName.Text + ": "
+ ex.Message);
}
}
private void Log(string s)
{
m_txtLog.Invoke(new EventHandler(delegate
{
m_txtLog.Text += Environment.NewLine + s;
}));
}
private void port_DataReceived(object sender,
SerialDataReceivedEventArgs e)
{
string data = "";
while (m_comPort.BytesToRead > 0)
{
data += Convert.ToChar(m_comPort.ReadByte());
}
Log(data);
}
private void m_btnClose_Click(object sender, EventArgs e)
{
try
{
if (m_comPort.IsOpen)
{
m_comPort.Close();
Log("Port successfully closed");
}
}
catch (Exception ex)
{
Log("Could not close port: " + ex.Message);
}
}
}
}
Note: Send command supports sending chars with delay between them.
Janiek
On Wed, 1 Mar 2006 02:39:26 -0800, Mircea
<Mi****@discussions.microsoft.com> wrote:
Sorry for this reply, but I forgot to mention that my problem is only with a
GUI program. The DataReceived works perfect in a console program.
What is wrong with a GUI program? Or I am missing something?
I would like to see a simple GUI program which works with DataReceived event
and to see what is wrong with my program.
Thank you.