2014-01-08 1 views
0

Может кто-то помочь мне с этим кодом:For Loop: Переход к следующей строке после Х секунд

У меня есть DataGrid с 2-мя колонками:
My grid

и то, что я хочу сделать, это использовать PsTools' Psloggedon cmd, чтобы дать мне имя каждого зарегистрированного пользователя и добавить этот результат в столбец «LOGGED_IN», но то, что происходит, заключается в том, что если на ПК не зарегистрирован пользователь, процесс занимает около 5 минут, чтобы опубликовать сообщение об ошибке.

Теперь, что я хочу сделать, это то, что если .5 секунд зашло, чтобы просто забыть строку, в которой он сейчас запрашивает, и перейти к следующей строке в столбце?

вот vb.net код я хочу сосредоточиться на:

Dim RowCount As Integer = datagridView1.RowCount 
    For i = 0 To RowCount - 2 
     'PERFORM PSLOGGEDON ROUTINE 
     Dim Proc1 As New Process 
     Proc1.StartInfo = New ProcessStartInfo("psloggedon") 
     Proc1.StartInfo.Arguments = "-l \\" & datagridView1.Rows(i).Cells(0).Value & "" 
     Proc1.StartInfo.RedirectStandardOutput = True 
     Proc1.StartInfo.UseShellExecute = False 
     Proc1.StartInfo.CreateNoWindow = True 
     Proc1.Start() 

     'INSERT RESULTS IN LOGGEN_IN COLUMN 
     datagridView1.Rows(i).Cells(1).Value = Proc1.StandardOutput.ReadToEnd 
    Next 

Может кто-то пожалуйста, покажите мне, как писать код, чтобы получить, что сделано?

+0

Вы можете пройти через код? Какая линия занимает много времени? – djv

ответ

3

Использование Process.WaitForExit(int milliseconds) способ.

Instructs the Process component to wait the specified number of milliseconds for the associated process to exit.

Return Value
Type: System.Boolean

true if the associated process has exited; otherwise, false .

Вы можете использовать Process.Kill, чтобы убить процесс, если он не сделал выход в данный момент времени.

Что-то вроде

Dim RowCount As Integer = datagridView1.RowCount 
For i = 0 To RowCount - 2 
    'PERFORM PSLOGGEDON ROUTINE 
    Dim Proc1 As New Process 
    Proc1.StartInfo = New ProcessStartInfo("psloggedon") 
    Proc1.StartInfo.Arguments = "-l \\" & datagridView1.Rows(i).Cells(0).Value & "" 
    Proc1.StartInfo.RedirectStandardOutput = True 
    Proc1.StartInfo.UseShellExecute = False 
    Proc1.StartInfo.CreateNoWindow = True 
    Proc1.Start() 

    If Not Proc1.WaitForExit(5000) Then 
     Proc1.Kill() 
    End If 

    'INSERT RESULTS IN LOGGEN_IN COLUMN 
    datagridView1.Rows(i).Cells(1).Value = Proc1.StandardOutput.ReadToEnd 
Next 
+0

Я пробовал и получил эту ошибку: «Win32Exception был необработанным Доступ запрещен« что может быть причиной этого? права администратора? –