【发布时间】:2020-11-26 08:33:27
【问题描述】:
我想要做的是编写一个应用程序以在所需的时间(分钟)内终止进程。主要目标是检查进程是否正在运行,如果它正在运行;如果没有,要求终止进程;仍然在后台等待并检查它是否正在运行。我自己不是编码员,只是下载并尝试编写一个简单的应用程序。所以请原谅我糟糕的编码技巧。
这是我的代码,我有 1 个计时器、1 个状态栏和 1 个按钮。还听说计时器只处理 1 分钟,但我不知道如何将其间隔转换为分钟。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Interval = 1800
CheckIfRunning()
End Sub
Dim p() As Process
Private Sub CheckIfRunning()
p = Process.GetProcessesByName("Zoom") 'Process name
If p.Count > 0 Then
' Process is running
ToolStripStatusLabel1.Text = "ZOOM IS RUNNING"
Else
' Process is not running
ToolStripStatusLabel1.Text = "ZOOM IS NOT RUNNING"
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim ZOOM() As Process = Process.GetProcessesByName("Zoom")
Dim ask As MsgBoxResult = MsgBox("30Min limit, Kill Zoom?", MsgBoxStyle.YesNo)
If ask = MsgBoxResult.Yes Then
For Each Process As Process In ZOOM
Process.Kill()
Timer1.Stop()
Timer1.Interval = 1800
Timer1.Start()
Next
Else
Timer1.Stop()
Timer1.Interval = 1800
Timer1.Start()
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Timer1.Start()
End Sub
End Class
它有点工作,但是当 30 分钟限制完成时,它会向同一个消息框发送垃圾邮件。而且我无法让它正常工作,所以需要一些帮助。
【问题讨论】:
-
Timer1.Interval = 1800将 Timer 间隔设置为1.8秒。您仅在 Form.Load 上调用CheckIfRunning(),因此没有人知道该进程是否在此之后终止。您应该在 Tick 处理程序中执行此操作,您还可以在其中检查 30 秒时间段是否已超时:您可能需要比较 DateTime 对象来验证这一点,设置 Timer 启动时的时间戳——不要显示 MessageBox在/从由计时器调用的事件处理程序中,而无需先暂停计时器。 -- 无需存储p()