Проблема с выполнением команды командной строки в VB

Я делаю программу, которая будет форматировать флешки, выбранные пользователем. Для этого я использую процесс format.com и отправляю ключ «Enter», чтобы процесс был полностью автоматическим. Чтобы это работало правильно, я задерживаю нажатие клавиши «Ввод» на полсекунды, чтобы убедиться, что оно отправляется в командную строку. По какой-то причине одно окно командной строки ненадолго открывается, а затем закрывается, что, похоже, создает проблему со второй командой, которую я пытаюсь выполнить, когда файлы затем будут скопированы с другой флешки на отформатированные. Visual Basic полностью зависает, и единственный способ получить контроль — нажать Ctrl + Alt + Del. У меня даже копирование задерживается на 20 секунд, чтобы убедиться, что процесс форматирования завершен. Вот мой код:

   Private Sub Button1_Click(sender As Object, e As EventArgs)
    'Variables initialized
    Dim i As Integer
    Dim DrvsToFormat As String

    'Stores all selected drives in an array named "drives" and creates string with drive letter
    Dim drives(ListBox1.SelectedItems.Count) As String
    For i = 0 To ListBox1.SelectedItems.Count - 1
        drives(i) = ListBox1.SelectedItems(i).ToString.Substring(0, 2)

        If i = Not drives.Length Then
            DrvsToFormat = DrvsToFormat & " " & drives(i) & ","
        Else
            DrvsToFormat = DrvsToFormat & " " & drives(i)
        End If

    Next

    'Gets the current date and formats it as "mm-dd"
    Dim currentDate As Date = Date.Today()
    Dim formattedDate As String = currentDate.ToString("MM-dd")

    'Prompts the user to ensure they wish to format the drives
    Dim response = MessageBox.Show("Are you sure you want to format drive(s) " & DrvsToFormat & "? All data will be lost.", "WARNING!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)
    If response = MsgBoxResult.Yes Then

        'Iterates through all selected drive, performs quick format as NTFS, and names the drive with the current date
        'Sends enter key in order to continue formatting in cmd prompt
        For i = 0 To drives.Length - 1
            Process.Start("format.com", drives(i) & "/Q /FS:NTFS /V:" & formattedDate)
            Threading.Thread.Sleep(500)
            SendKeys.Send("{ENTER}")
            Threading.Thread.Sleep(20000)
            Process.Start("cmd.exe", "Xcopy " & MasterFD.masterDrive & " " & drives(i) & "/e ")
        Next

    End If

End Sub

person Josh    schedule 17.06.2015    source источник
comment
Не используйте SendKeys — вместо этого пишите непосредственно во входной поток процесса.   -  person James Thorpe    schedule 17.06.2015
comment
Вот дубликат с использованием этого метода, это С#, но применяются те же принципы/вызовы методов. Как программно отформатировать SD-карту на fat16 в Windows [.net]   -  person James Thorpe    schedule 17.06.2015