我是想用自己的电脑做服务器,通过PC对单片机通信,实现对家里电器的远程控制。做了个web页面。想实现,点击按钮,PC通过串口向单片机发送一个字节数据。然后单片机的程序是,收到一个字节,立刻返回多个字节的字符串。现在问题是,按下按钮后PC能正常发送,单片机应该也正常返回了,但是web端没能完整接受这个字符串,导致get.text里显示不全。(例如我让单片机返回的是Connected:现在按一下网页里的button,有时候显示出“Connected”可是有时候又显示“Con”,甚至完全显示为空白“”)我个人的判断是因为按下button就pageload了,所以DataReceivedHandler没来的及接受完数据。有什么能让buttonclick不pageload而是DataReceivedHandler处理完之后再刷新页面的方法吗?using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.IO.Ports;
using System.Text;
public partial class _Default : System.Web.UI.Page
{
    private SerialPort comm;
    private bool flag=false;
    protected void Page_Load(object sender, EventArgs e)
    {
        comm = new SerialPort();
        comm.BaudRate = 9600;
        comm.PortName = "COM4";
        comm.DataBits = 8;
        comm.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);        
    }
    protected void Check_Click(object sender, EventArgs e)
    {
        comm.Open();
        Time.Text = (System.DateTime.Now.ToLongTimeString());
        comm.Write("1");
        Get.Text = "";//按下按钮就把这个textbox清空,避免无法分辨当前显示的是这一次还是上一次返回的数据
    }
    protected void Get_TextChanged(object sender, EventArgs e)
    {
    }
    void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        Get.Text = indata;        
    }
}

解决方案 »

  1.   

    楼主,
    Page_Load方法的方法体改成
    if(!IsPostBack)
    {
    comm = new SerialPort();
    comm.BaudRate = 9600;
    comm.PortName = "COM4";
    comm.DataBits = 8;
    comm.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 
    }
    试试
      

  2.   

    第一次知道。web也可以串口通信。
      

  3.   


    放在这里面了。
    但是后面执行到
      protected void Check_Click(object sender, EventArgs e)
      {
      comm.Open();
      Time.Text = (System.DateTime.Now.ToLongTimeString());
      comm.Write("1");
      Get.Text = "";//按下按钮就把这个textbox清空,避免无法分辨当前显示的是这一次还是上一次返回的数据
      }的comm.Write("1");的时候
    报错说comm没有实例化。怎么没、回事??