Уничтожение процесса на основе времени VB.NET

#c# #vb.net

#c# #vb.net

Вопрос:

что я пытаюсь сделать, так это закодировать приложение для завершения процесса в течение желаемого времени (минут). Основная цель — проверить, запущен ли процесс, если он запущен; попросите завершить процесс, если нет; все еще подождите в фоновом режиме и проверьте, запущен ли он. Я сам не программист, просто скачал и попытался закодировать простое приложение. Так что извините меня за мои плохие навыки программирования.

Вот мой код, у меня есть 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-минутный лимит завершен, он отправляет спам в тот же messagebox. И я не мог заставить его работать должным образом, поэтому мог бы воспользоваться некоторой помощью.

Комментарии:

1. Timer1.Interval = 1800 устанавливает интервал таймера в 1.8 секунды. Вы вызываете CheckIfRunning() только Form.Load, поэтому никто не знает, завершается ли процесс после этого момента. Вы должны сделать это в обработчике тиков, где вы также проверяете, истек ли тайм-аут 30-секундного периода: вы можете сравнить объекты DateTime, чтобы убедиться в этом, установив временную метку при запуске таймера — не показывать окно сообщения в / из обработчика событий, вызываемого таймеромбез предварительной остановки таймера. — Нет необходимости хранить p()

Ответ №1:

Interval Значение таймера — это количество миллисекунд, а не секунд. Так 1800 же 1.8 как и секунды, а не 30 минуты.

Поскольку в вашем Timer1_Tick случае вы почти сразу звоните MsgBox и говорите, что вам рассылают спам по ящикам сообщений, я думаю, вы, вероятно, используете неправильный таймер. Убедитесь, что вы используете таймер Windows Forms для приложения Windows Forms.

Также рекомендуется звонить Timer1.Stop() перед отображением любого пользовательского интерфейса, чтобы в любом случае предотвратить рассылку спама.