Я делаю программу, которая будет форматировать флешки, выбранные пользователем. Для этого я использую процесс 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
SendKeys
— вместо этого пишите непосредственно во входной поток процесса. - person James Thorpe   schedule 17.06.2015