Имейте код, который загружает файлы на FTP и занимает некоторое время до его окончания и достигает следующей строки кода. Тем временем я хотел бы показать индикатор прогресса и форму окна замораживания, пока это не будет сделано. Как это сделать?Индикатор выполнения - отображается перед следующей строкой
WinScp.PutFile(File, destFP, True) '<---this line taking some time
'Progress bar here till it reach next line...
If Not lsbxPicPaths.Items.Contains(destFP) Then
lsbxPicPaths.Items.Add(destFP)
Else
...
Для дальнейшего обсуждения
Перед open.Session я добавил:
AddHandler session.FileTransferProgress, AddressOf SessionFileTransferProgress
и ниже персонал был создан:
Function GetFile(source As String, destination As String, Optional removeSource As Boolean = False)
Dim result As Boolean = True
Try
session.GetFiles(source, destination, removeSource).Check()
Catch ex As Exception
result = False
'Logger.LogIt(Alert.Write(MsgType.ERROR), Eng.Write(EngType.COLLEC), Datasource.ToString & " | " & Me.reportName & " | " & ex.ToString, LogPath, isDebug)
End Try
Return result
End Function
Private Shared Sub SessionFileTransferProgress(sender As Object, e As FileTransferProgressEventArgs)
'Print transfer progress
_lastProgress = e.FileProgress
End Sub
Public Shared _lastProgress As Integer
then calling like this:
Me.Cursor = Cursors.WaitCursor
WinScp.GetFile(myremotePicturePath, ladujZdjeciaPath, True)
form.ProgressBar1.Value = 0
ProgressBar1.Show()
Do
ProgressBar1.Value = WinScpOperation._lastProgress
ProgressBar1.Refresh()
Loop Until ProgressBar1.Value = 1
Me.Cursor = Cursors.Default
но к тому же я хочу, чтобы показать пользовательская форма, когда индикатор прогресса на ней и который покажет dur получать файл и показывать прогресс, затем разложить и разблокировать родительскую форму. Я не знаю, как передать значение моменту динамической формы. Я пытался начать, как это изменить мой текущий код:
Me.Cursor = Cursors.WaitCursor
WinScp.GetFile(myremotePicturePath, ladujZdjeciaPath, True)
Dim form As New Form
Dim pb As New ProgressBar
pb.Minimum = 0
pb.Maximum = 1
form.ShowDialog()
'pass value to progress bar
form.ProgressBar1.Value = 0
' ProgressBar1.Hide()
'ProgressBar1.Value = 0
form.Close()
Me.Cursor = Cursors.Default
для дальнейшего обсуждения nr.2
Новой форма:
Открытого класса FrmProgressBarWinscp
Property value As Integer
Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
value = 0
ProgressBar1.Value = 0
ProgressBar1.Show()
End Sub
Sub Run()
Do
ProgressBar1.Value = value
ProgressBar1.Refresh()
Loop Until value = 1
MsgBox("Done")
'ProgressBar1.Hide()
'ProgressBar1.Value = 0
End Sub
End Class
и по орг. Форме:
WinScp.GetFile(myremotePicturePath, ladujZdjeciaPath, True)
Dim pro As New FrmProgressBarWinscp()
pro.ShowDialog()
Do
pro.value = WinScpOperation._lastProgress
pro.Run()
Loop Until WinScpOperation._lastProgress
Me.Cursor = Cursors.Default
Связанный вопрос: [Showing WinSCP. NET прогресс передачи данных на индикатор производительности WinForm] (http://stackoverflow.com/q/33012517/850848) –