使用vb.net将图像列表加载到列表框时添加进度条

时间:2011-08-07 14:31:23

标签: vb.net progress-bar

我正在尝试使用打开文件对话框和文件夹浏览对话框添加图像,并将图像列表填充到列表框。添加这些图像时,我需要为其加载的每个图像显示进度条。

我试图得到它但是当进度条的值说明大约25 0r 40时它会停止在那一点但是我需要显示进度条直到它完成100%然后填充图像列表。

我该怎么做?

这是我的代码:

    Private Sub AddImages_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddImages.Click

    If Not Directory.Exists(Application.StartupPath + "\Backup\") = True Then
        Directory.CreateDirectory(Application.StartupPath + "\Backup\")
    End If



    OpenFileDialog1.FileName = "Select a Image"
    OpenFileDialog1.Multiselect = True
    OpenFileDialog1.InitialDirectory = "C:\Users\Public\Pictures\Sample Pictures"
    OpenFileDialog1.Filter = "All Type Of Image Files|*.*|Joint Photographic Experts Group [JPEG]|*.jpg|Bitmap [BMP|*.bmp|Tagged Image File Format [TIFF]|*.tiff|Portable Network Graphics [PNG]|*.png"
    If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then

        ProgressBar2.Show()
        ProgressBar2.Step = 10
        Dim str As String
        For Each str In OpenFileDialog1.FileNames
            Load.Text = "Loading..."

            Dim fso As New FileSystemObject
            Dim MyName As String
            Dim MyExtension As String

            MyName = fso.GetFileName(CStr(str))
            MyExtension = fso.GetExtensionName(MyName)

            System.IO.File.Copy(str, Application.StartupPath + "\Backup\" + MyName & "." & MyExtension, True)

            CheckedListBox1.Items.Add(str, CheckState.Checked)
            Thumbcontrol1.AddThumbnail(str)
            Thumbcontrol1.BackgroundImage = Nothing
            CheckedListBox1.SelectedIndex = 0
            ProgressBar2.PerformStep()
        Next
        SaveProject.Enabled = True
        Delete.Enabled = True
        Edit.Enabled = True
        ClearAll.Enabled = True
        CheckAll.Enabled = True
        UncheckAll.Enabled = True
        Timer1.Stop()
        Load.Text = "Loading Completed"
    Else
    End If
    ProgressBar2.Visible = False
    Load.Text = Nothing

End Sub

3 个答案:

答案 0 :(得分:0)

不要使用UI进行加载。使用后台工作者。 BackgroundWorker在另一个线程中工作,它可以报告进度以将其绑定到进度条。

答案 1 :(得分:0)

进度条停止移动,因为Windows认为您的程序存在严重错误。它用'ghost'窗口替换你的主窗口,你可以告诉它,因为它在标题栏中显示“Not Responding”。

这样做有助于提醒用户您的程序已经死亡,并且不会响应用户的任何输入。单击鼠标或敲击键盘不会产生任何影响,用户可以做的就是在代码完成动作时无助地观看。

这不是一个理想的用户界面。您可以使用BackgroundWorker解决此问题,以便在单独的线程上完成繁重的工作。保持用户界面线程响应。请务必阅读MSDN文章,以便您知道该怎么做,您必须调整代码。

答案 2 :(得分:0)

删除ProgressBar2.Step = 10行并执行此操作:

        Dim str As String
        Dim counter As Integer 'new!
        For Each str In OpenFileDialog1.FileNames
            Load.Text = "Loading..."

            Dim fso As New FileSystemObject
            Dim MyName As String
            Dim MyExtension As String

            MyName = fso.GetFileName(CStr(str))
            MyExtension = fso.GetExtensionName(MyName)

            System.IO.File.Copy(str, Application.StartupPath + "\Backup\" + MyName & "." & MyExtension, True)

            CheckedListBox1.Items.Add(str, CheckState.Checked)
            Thumbcontrol1.AddThumbnail(str)
            Thumbcontrol1.BackgroundImage = Nothing
            counter += 1 'new
            CheckedListBox1.SelectedIndex = 0
            ProgressBar2.Value = (counter * 100) / OpenFileDialog1.FileNames.Length 'new
        Next

它没有解决您不使用线程的问题,因为其他答案是正确的指出。