Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 进度条-在下一行之前显示_Vb.net - Fatal编程技术网

Vb.net 进度条-在下一行之前显示

Vb.net 进度条-在下一行之前显示,vb.net,Vb.net,有一些将文件上传到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)

有一些将文件上传到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
    ...
创建了以下工作人员:

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
但除此之外,我想在进度条上显示自定义表单,在获取文件和显示进度的过程中显示自定义表单,然后释放并解锁父表单。我不知道;我不知道如何将值传递给我的动态表单的进度条。我尝试这样开始以更改当前代码:

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
进一步讨论第2条

新表格:

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
公共类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

我以前从来没有用过这个,但是在屏幕上看一看,这个可能会有用。你可能需要自己更仔细地研究它才能让它工作

如果文件传输在自己的线程中运行,并且没有冻结ui,请尝试以下操作

向窗体中添加进度条控件 将最小属性设置为0 将最大属性设置为1 将visible属性设置为false 在要显示进度条的位置,插入类似以下内容的代码

progressbar1.value=0
progressbar1.show
Do
    progressbar1.value=winscp.FileProgressEventArgs.FileProgress
    progressbar1.refresh
until progressbar1.value=1
progressbar1.hide
progressbar.value=0

您可能需要为Do/循环终止选择不同的条件,例如,如果WINSCP在文件完成时将标志更改为True,并且如果传输失败,您需要终止循环。

而不是使用dim创建表单,我将使用VisualStudio的AddNewItem添加表单,可以通过右键单击右侧的项目名称(而不是解决方案名称)来访问该表单。弹出关联菜单。选择“添加”,然后单击“新建项”,并选择与项目类型相同的适当表单

将progressBar添加到表单中-如果需要,可以将名称保留为progressBar1,但如果更改is,则需要在下面的代码中更改对它的引用

在新表单的代码顶部添加与导入winscp内容相同的导入行

将这段代码(类似于更新问题中的代码)放入新表单中。我对代码进行了一些编辑,使其能够以动态形式工作

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
    Me.Cursor = Cursors.WaitCursor
    WinScp.GetFile(myremotePicturePath, ladujZdjeciaPath, True)
    progressBar1.Minimum = 0
    progressBar1.Maximum = 1
    progressBar1.Value = 0
    Do
        progressBar1.value=winscp.FileProgressEventArgs.FileProgress
        progressbar1.refresh
    until progressbar1.value=1
    Me.Cursor = Cursors.Default
    form.Close()
End Sub
e、 g Form1.myremotePicturePath和Form1.ladujZdjeciaPath

另外,如果最初在原始表单中定义函数和这两个变量,则需要将它们从Private更改为Public,以便新表单可以看到它们


我认为应该这样做。如果您有任何问题,请告诉我,但我将在未来几天晚些时候才回家,因此我可能要到晚上很晚才回复-有点像今晚:)

它正在工作,但我希望在下载文件时在单独的窗口(表格)中显示进度条,因此我创建了动态表格,但不知道如何将值传递给它,当它完成时,带有进度条的动态表单将消失,并且初始表单将再次运行。如果可能,显示从0到100的进度,而不是0到1。你能帮忙吗?我把我的新代码放在主主题中。与您之前的回答相同:1)WinSCP被阻塞,因此无法工作。2) 原始代码中没有
winscp
字段。3) (不是
FileProgressEventArgs
)是一个类,因此您不能通过这种方式访问它的
FileProgress
。并且您不应该发布两个几乎相同的答案。如果你想改进以前的答案,请编辑它,不要发布新答案。马丁。而不是在别人的代码中挑出你认为是错误的东西,批评别人的帮助。也许你应该花点时间学习机智和外交技巧。这将有助于社区的发展,而不是阻止新成员尝试提供帮助。是的,答案是相似的,但我认为发布两个单独的答案比一大堆代码更清楚。1)你的答案是如此错误,值得批评。但我的意思是批评,但向或主要是向随机读者表明,这个解决方案是不可遵循的。请下次做更多的研究,以避免发布一个只会混淆OP和其他人的“解决方案”。2) 发布两个单独的答案并不更好,除非它们提供了两种完全不同的方法。3) 使用
@username
回复某人。我没有收到其他通知。我偶然发现了您的回复,欢迎来到Stack Overflow!:)这是工作,但新的形式出现不是马上,但主要形式是冻结和新的形式出现后。这就是当前的问题,为了避免冗长的主题,我制作了一个新的主题。你能看一下吗?:1)WinSCP被阻塞,所以这无法工作。2) 原始代码中没有
winscp
字段。3) (非
FileProgressEventArgs
)是一个类,因此您无法通过这种方式访问其
FileProgress
。相关问题: