Рейтинг:
0
Richard Deeming
Process.GetProcessesByName
возвращает моментальный снимок запущенных процессов в момент их вызова. Вы вызываете его только один раз, вне вашего цикла. Таким образом, если процесс не выполняется, когда начинается цикл, цикл никогда не закончится.
Попробуйте вместо этого что-нибудь вроде этого:
Do Until Process.GetProcessesByName("photoshop").Length > 0
System.Threading.Thread.Sleep(5000)
Loop
NB: Если вы делаете это в потоке пользовательского интерфейса, ваше приложение будет заморожено до начала процесса. Вы должны рассмотреть возможность использования
Async
и
Await
вместо:
Асинхронное программирование с использованием Async и Await (Visual Basic) | Microsoft Docs[
^]
Например:
Public Shared Async Function WaitForProcessAsync(ByVal name As String, ByVal cancellationToken As CancellationToken) As Task(Of Process)
Do Until cancellationToken.IsCancellationRequested
Dim p As Process() = Process.GetProcessesByName(name)
If p.Length > 0 Then Return p(0)
Await Task.Delay(5000, cancellationToken)
Loop
Return Nothing
End Function
MasterGamerFX
ладно ,я пытаюсь, но думаю о другом варианте
но я подумал, как это сделать, если этот процесс не запустился за 2 секунды, а затем сделать что-то вроде msgbox ..
Richard Deeming
Используйте Async
версия, которую я опубликовал:
Dim cts As New CancellationTokenSource(TimeSpan.FromSeconds(2))
Dim p As Process = Await WaitForProcessAsync("photoshop", cts.Token)
If p Is Nothing Then MessageBox.Show("...")
Вы, очевидно, захотите уменьшить задержку внутри метода с текущих пяти секунд - например:
Await Task.Delay(500, cancellationToken)
MasterGamerFX
хорошо, но где я помещаю код ?
Richard Deeming
Вы помещаете функцию туда, где она может быть вызвана кодом, который должен ждать процесса.
Вы помещаете код для вызова этой функции туда, где вы хотите дождаться процесса.
MasterGamerFX
я стараюсь, но у меня есть ошибки
нужна помощь объясните мне лучше пожалуйста
Richard Deeming
Если вы хотите, чтобы кто-то помог вам исправить ошибку, то вам нужно показать нам, что вы сделали, и рассказать нам, в чем заключаются ошибки.
MasterGamerFX
хорошо , я загружаю картинку, которая объясняет, что у меня есть (ошибки)
https://imgur.com/aKZomID
Richard Deeming
Серьезно?
Public Shared Async Function WaitForProcessAsync(ByVal name As String, ByVal cancellationToken As CancellationToken) As Task(Of Process)
Do Until cancellationToken.IsCancellationRequested
Dim p As Process() = Process.GetProcessesByName(name)
If p.Length > 0 Then Return p(0)
Await Task.Delay(5000, cancellationToken)
Loop
Return Nothing
End Function
Private Async Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim cts As New CancellationTokenSource(TimeSpan.FromSeconds(2))
Dim p As Process = Await WaitForProcessAsync("photoshop", cts.Token)
If p Is Nothing Then MessageBox.Show("...")
End Sub
Добавь
Imports System.Threading
в верхней части файла и измените
"..."
в
MessageBox.Show
к сообщению, которое вы хотите отобразить.
MasterGamerFX
Кто-нибудь может помочь мне закодировать его, пожалуйста