我正在开发一个C#/ Asp.net应用程序,它与使用串行端口的设备通信。
首先,我有一个按钮,执行以下操作:
Response.Redirect("Zxx.aspx?ValtoSibs=" + Strvals);
这基本上将我重定向到我打开我的串口的页面,写入int然后想要读取我从设备获得的任何输入,例如,如果我点击设备上的一个键我想在应用程序中读取它按照我的意愿行事。
这是在Zxx.aspx上运行的代码
protected void Page_LoadComplete(object sender, EventArgs e)
{
string ValtoSibs = Request.QueryString["ValtoSibs"];
SIBS.SIBS ComTPA = new SIBS.SIBS();
ComTPA.IniciaTPA();
ComTPA.SendPaymentCmd(Int32.Parse(ValtoSibs));
if (ComTPA.ComTPA.ReadExisting().Contains("M001909"))
{
ComTPA.ComTPA.DiscardInBuffer();
ComTPA.ComTPA.DiscardOutBuffer();
ComTPA.CloseTPA();
Response.Redirect("Erro.aspx");
}
}
在上面的块中,我不知道设备上是否按下任何按钮,因为我需要一个封装块的while循环:
if (ComTPA.ComTPA.ReadExisting().Contains("M001909"))
{
ComTPA.ComTPA.DiscardInBuffer();
ComTPA.ComTPA.DiscardOutBuffer();
ComTPA.CloseTPA();
Response.Redirect("Erro.aspx");
}
问题是,当我尝试放置一个while循环时,页面不加载zxx.aspx不加载,它锁定无限循环但是当我按下设备上的任何键时,例如发送M001909字符串,它根据需要起作用,关闭端口并重定向页面。
我的主要问题是,我需要在Zxx.aspx页面,已经在客户端完全加载,然后让while循环工作,以便我可以听取设备上发送的命令。
找到解决方案,
我创建了一个新的DataReceived Handler,并在其中调用了一个函数,该函数执行以下操作并将其作为参数ReadExisting():
if (ComTPA.ComTPA.ReadExisting().Contains("M001909"))
{
ComTPA.ComTPA.DiscardInBuffer();
ComTPA.ComTPA.DiscardOutBuffer();
ComTPA.CloseTPA();
Response.Redirect("Erro.aspx");
}