从串口读取并显示结果

时间:2013-03-04 08:03:08

标签: c# asp.net serial-port rfid

这是我到目前为止提出的代码:

protected void Page_Load(object sender, EventArgs e)
{
    try {
    serialPort1.PortName = "COM4";
    serialPort1.BaudRate = 9600;
    serialPort1.Open();
    this.serialPort1.DataReceived += new      
        System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
    Label1.Text = "Connected";
    UpdatePanel1.Update();
    }
    catch (Exception ex) {

    }
}

string x = "";
private void serialPort1_DataReceived(object sender, 
      System.IO.Ports.SerialDataReceivedEventArgs e){

    x = serialPort1.ReadExisting();
    TextBox1.Text = x;
    UpdatePanel1.Update();
}

问题是代码运行后文本框保持为空...(我使用AJAX更新面板刷新文本框文本)事情就是当我在调试期间设置断点时,从串口接收的数据是在变量并设置为新的文本框文本,但是当代码完成时,不会显示任何内容....我非常确定updatepanel是有效的,因为我已经对它进行了测试。

PS串口连接到rfid阅读器,我试图读取标签。我已成功编写了一个Windows窗体应用程序来执行我想要的操作,但我需要将其迁移到ASP.NET

1 个答案:

答案 0 :(得分:1)

只有在读取器连接到服务器(而不是运行浏览器的计算机)时,才能从ASP.NET应用程序中的串行端口读取数据。它似乎只是因为你在本地进行测试而起作用。

初始页面渲染完成后,serialPort1对象将被销毁。 ASP.NET页面仅存在,直到呈现页面。然后它就被摧毁了。下一个请求再次重新创建所有对象。因此,每次浏览器进入服务器时,串口都会一次又一次地打开。

UpdatePanel仅将经典浏览器请求更改为AJAX - 它不会更改ASP.NET服务器处理的工作方式。它仍然是客户端浏览器触发的请求 - 响应操作。在您的情况下,UpdatePanel必须在计时器上查询服务器。

最好的办法是根据您的Windows窗体代码创建一个ActiveX控件,并将其嵌入您的网站。