IMAPI2 en VB 2008 barre de progression
-
04-10-2019 - |
Question
je commence à faire le programme qui graver des CD / DVD, et tout va bien. J'ai trouvé moyen de brûler avec l'API de IMAPI2, mais maintenant j'ai problème: Je ne peux pas obtenir la barre de progression de cette combustion. Voici le code:
Dim CDD1 As New IMAPI2.MsftDiscMaster2
Dim CDD2 As New IMAPI2.MsftDiscRecorder2
Dim FSI As New IMAPI2FS.MsftFileSystemImage
Dim CDD3 As New IMAPI2.MsftDiscFormat2Data
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Index = 0
Dim UniqueID = ""
Dim Directory
Dim Path = "C:\lll"
Dim result
Dim Stream
Label1.Text = "----- Started -----."
UniqueID = CDD1.Item(Index)
Label1.Text = Label1.Text & vbCrLf & "ID found: " & UniqueID
CDD2.InitializeDiscRecorder(UniqueID)
Label1.Text = Label1.Text & vbCrLf & "Recorder selected!"
Directory = FSI.Root
Label1.Text = Label1.Text & vbCrLf & "Directory is here: " & Directory.ToString
CDD3.Recorder = CDD2
Label1.Text = Label1.Text & vbCrLf & "Recorder 2 selected!"
CDD3.ClientName = "IMAPI2 TEST"
Label1.Text = Label1.Text & vbCrLf & "Client Name Selected!"
FSI.ChooseImageDefaults(CDD2)
Label1.Text = Label1.Text & vbCrLf & "Default selected!"
Directory.AddTree(Path, False)
Label1.Text = Label1.Text & vbCrLf & "Directory added!"
result = FSI.CreateResultImage()
Stream = result.ImageStream
Label1.Text = Label1.Text & vbCrLf & "Writing content to disc..."
If (CDD3.IsCurrentMediaSupported(CDD2) = True) Then
If (CDD3.IsRecorderSupported(CDD2) = True) Then
CDD3.Write(Stream)
Else
MsgBox("Not Suported Recorder!")
End If
Else
MsgBox("Not Suported Media!")
End If
Label1.Text = Label1.Text & vbCrLf & "----- Finished -----"
End Sub
Lorsque la commande
CDD3.Write (flux)
est déclenchée, le gel du programme, et ne répondent pas tant que les données ont brûlé complètement.
Yat-il un moyen d'arrêter cela, le programme d'arrêt et le gel permettant la barre de progression?
Merci.
La solution
Vous devez utiliser le filetage. Donc, dans votre bouton gestionnaire d'événements clic vous commencez un nouveau thread qui fait la combustion réelle et tout ce qui se passe dans son thread séparé, le fil conducteur peut continuer à mettre à jour l'interface utilisateur graphique (y compris votre barre de progression).
Voir Thread.Start pour un simple échantillon et si vous voulez plus d'informations, je vous suggère de commencer ici: Managed Threading