这是我到目前为止提出的代码:
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
解决方法:
只有在读取器连接到服务器(而不是运行浏览器的计算机)时,才能从ASP.NET应用程序中的串行端口读取数据.它似乎只是因为你在本地测试它.
初始页面呈现完成后,将销毁serialPort1对象. ASP.NET页面仅存在,直到呈现页面.然后它就被摧毁了.下一个请求再次重新创建所有对象.因此,每次浏览器进入服务器时,串口都会反复打开.
UpdatePanel仅将经典浏览器请求更改为AJAX – 它不会更改ASP.NET服务器处理的工作方式.它仍然是客户端浏览器触发的请求 – 响应操作.在您的情况下,UpdatePanel必须在计时器上查询服务器.
最好的办法是根据Windows窗体代码创建一个ActiveX控件,并将其嵌入到您的网站中.