你好,我有一个PIC16F877A微控制器和液晶显示器。我已经让PIC控制器每隔2分钟在LCD屏幕上显示随机数,并且它也会通过RS232电缆每2分钟将这些随机生成的数字发送到我的笔记本电脑。我正在使用ASP.NET 4 C#创建一个网站,我想读取这些数字并执行功能。我写了以下编码,但它没有工作,但我在我的笔记本电脑超级终端接收这些随机数。请建议我如何实现这一点 - 我必须每2分钟收到一次这些代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO.Ports;
public partial class Entercode : System.Web.UI.Page
{
static SerialPort mySerialPort = new SerialPort("COM46", 1200, Parity.None, 8, StopBits.One);
protected void Page_Load(object sender, EventArgs e)
{
mySerialPort.Open();
String str = mySerialPort.ReadLine();
mySerialPort.Close();
}
}
答案 0 :(得分:1)
我建议重新构建您的程序。
ASP.NET旨在成为无状态(因为它的HTTP基础)。 ASP.NET主机进程(w3wp.exe)可以随意终止和回收,而不会发出警告。如果需要可靠性,则应在专用的Windows服务进程中执行SerialPort通信,该进程通过某种形式的IPC与ASP.NET应用程序通信。
使用Page_Load是非常不合适的,更不用说非线程安全了。 .Close
方法等同于调用.Dispose
,这会使您的SerialPort成为静态成员(因为它的生命周期结束)。
我明白你不熟悉ASP.NET或IO端口编程。我建议你分别在这些方面磨练你的技能(比如首先开发一个命令行串口程序,然后是一个不使用串口的简单的ASP.NET Web应用程序),然后在两者都很强大之后将它们组合起来。领域