0

您好,我有一个 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();

    }
}
4

1 回答 1

1

我建议重新构建你的程序。

ASP.NET 被设计为无状态的(因为它的 HTTP 基础)。ASP.NET 宿主进程 (w3wp.exe) 可以随意终止和回收,不会发出警告。如果您需要可靠性,您应该在专用的 Windows 服务进程中执行 SerialPort 通信,该进程通过某种形式的 IPC 与您的 ASP.NET 应用程序进行通信。

使用 Page_Load 是非常不合适的,更不用说非常不安全了。该.Close方法等效于调用.Dispose,它破坏了将您的 SerialPort 作为静态成员(作为其生命周期结束)的点。

我知道您不熟悉 ASP.NET 或 IO 端口编程。我建议你分别磨练这些方面的技能(即先开发一个命令行串口程序,然后是一个不使用串口的简单的 ASP.NET Web 应用程序),然后在两者都很强之后将它们结合起来领域。

于 2012-08-15T21:33:37.880 回答