我正在尝试使用打开文件对话框和文件夹浏览对话框添加图像,并将图像列表填充到列表框。添加这些图像时,我需要为其加载的每个图像显示进度条。
我试图得到它但是当进度条的值说明大约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
答案 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
它没有解决您不使用线程的问题,因为其他答案是正确的指出。