#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()
перед отображением любого пользовательского интерфейса, чтобы в любом случае предотвратить рассылку спама.