【问题标题】:Time based process killing VB.NET基于时间的进程杀死 VB.NET
【发布时间】: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()

标签: c# vb.net


【解决方案1】:

计时器的Interval 值是毫秒数,而不是秒数。所以18001.8 秒,而不是30 分钟。

因为在您的Timer1_Tick 中,您几乎立即致电MsgBox,并且您说您收到了向您发送垃圾邮件的消息框,我认为您可能使用了错误的计时器。确保您将 Windows 窗体计时器用于 Windows 窗体应用程序。

在显示任何 UI 之前调用 Timer1.Stop() 也是一个好主意,以防止垃圾邮件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多