我对我的编码进行了一些更改并对其进行了测试。它仍然没有完美的工作,因此我希望在这里有一些指导。
Imports System
Imports System.Data
Imports System.Configuration
Imports System.Collections
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports System.IO.Ports
Partial Class Main
Inherits System.Web.UI.Page
Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load
Dim Serialport7 As New IO.Ports.SerialPort
With Serialport7
.PortName = "COM7"
.BaudRate = 9600
.Parity = Parity.None
.DataBits = 8
.StopBits = StopBits.One
End With
Try
Serialport7.Open()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Dim ReceivedData As String
ReceivedData = Serialport7.ReadLine()
If ReceivedData.Substring(0, 1) = "T" Then
TextBox1.Text = ReceivedData.Remove(0, 1)
ElseIf ReceivedData.Substring(0, 1) = "H" Then
TextBox2.Text = ReceivedData.Remove(0, 1)
End If
TextBox3.Text = System.DateTime.Now
Serialport7.Close()
End Sub
End Class
我遇到的错误:
TextBox2未显示读数,只有TextBox1显示读数。
网页表单不令人耳目一新,因此我的阅读材料不会更新。有什么方法可以自动更新Web表单吗?
赞赏所有指导。 谢谢。
答案 0 :(得分:0)
您有一个简单的解决方案来刷新您的页面,因为您的服务器无法控制客户端Web浏览器,所以当新数据可用时它将不会刷新(不应该,这不是不可能,但它很复杂而且不是很安全)。
所以你可以做的是添加一段javascript代码来定期刷新页面。
最好的方法是添加一个javascript函数,该函数对web服务进行ajax调用,该服务将读取串行端口数据,然后将数据发送回客户端页面。 在那里,您可以更新文本框值。
要更新您的网页,您可以使用以下JavaScript代码:window.location.reload()
如果您需要定期更新,可以查看this SO question
要在webforms中添加Web服务并定期调用它,请查看以下链接: http://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-asp-net-ajax-web-services
如果您不想定期刷新页面,只想在新数据可用时刷新您的值,请查看websockets(当我开始回答时忘记了它们)。
关于websockets的编辑 [另外,您应该考虑您的方法可以被许多不同的用户调用,也可以在不同的线程中调用。因此,您需要使串行端口读取线程安全,并将结果存储在某处,以避免向不同用户发送不同的数据。 <强> - 强>
图片您有用户A更新您的页面,然后用户B更新它。 当用户A调用页面时,您已经从串口读取了一些数据,因此用户A和用户B将显示不同的数据。
如果数据为1, 2, 3, 4
在您当前的实施中,用户A会看到1
,用户B会看到2