【发布时间】:2017-03-22 00:39:44
【问题描述】:
我在 vb.net 应用程序中添加了一个 Timer 控件,用于检查网站是否正常运行。应用程序中有两个计时器控件。两者都来自 System.Windows.Forms.Timer。
有 Timer1 和 Timer2。 Timer1 用于执行网站检查。 Timer2 只是在表单底部的 ToolStrip 中显示当前日期和时间。 Timer2 运行时显示时间没有问题,但是当我启动运行 Timer1 的网站检查时,应用程序在两次检查后冻结。有时它运行的时间更长,但最终会冻结。
我必须从任务管理器中结束任务才能关闭应用程序。我在调试器中并在运行可执行文件后对此进行了测试。我也完全删除了 Timer2 并进行了测试,但冻结仍然存在。这是我的代码。任何帮助将不胜感激。
Imports System
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
lblStatus.Text = ""
Timer1.Stop()
btnStart.Enabled = True
btnStop.Enabled = False
End Sub
Public Function CheckAddress(ByVal URL As String) As Boolean
Try
Dim request As WebRequest = WebRequest.Create(URL)
Dim response As WebResponse = request.GetResponse()
Catch ex As Exception
Return False
End Try
Return True
End Function
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Dim startPoint As Integer = -1
If CheckAddress(txtAddress.Text).ToString() = True Then
rtxtResults.AppendText(" -- " & txtAddress.Text & " - Website shows UP at " & tsClock.Text & " - " & vbNewLine)
ElseIf CheckAddress(txtAddress.Text).ToString() = False Then
rtxtResults.AppendText(" -- " & txtAddress.Text & " - Website shows DOWN at " & tsClock.Text & " - " & vbNewLine)
End If
Do
startPoint = rtxtResults.Find("Website shows DOWN at", startPoint + 1, RichTextBoxFinds.None)
If (startPoint >= 0) Then
rtxtResults.SelectionStart = startPoint
rtxtResults.SelectionLength = "Website shows DOWN at".Length
rtxtResults.SelectionColor = Color.Red
End If
Loop Until startPoint < 0
End Sub
Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs)
tsClock.Text = Now()
End Sub
Private Sub btnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click
If txtInterval.Text = "" Then
MsgBox("Must enter a number")
Exit Sub
End If
lblStatus.ForeColor = Color.Green
lblStatus.Text = "Running"
btnStart.Enabled = False
btnStop.Enabled = True
Timer1.Interval = Int(txtInterval.Text) * 1000
Timer1.Start()
End Sub
Private Sub btnStop_Click(sender As System.Object, e As System.EventArgs) Handles btnStop.Click
lblStatus.ForeColor = Color.Red
lblStatus.Text = "Stopped"
btnStop.Enabled = False
btnStart.Enabled = True
Timer1.Stop()
End Sub
End Class
【问题讨论】:
-
Timer不是控件。要成为控件,类必须直接或间接继承System.Windows.Forms.Control类。Timer类没有。它是一个组件,因为它实现了IComponent接口,这是设计器中需要使用的全部内容。控件是一种特殊类型的组件。 -
调用所有后台threads!