Je commence à créer un programme qui va graver des CD/DVD, et tout va bien. J'ai trouvé moyen de graver avec API IMAPI2, mais maintenant j'ai un problème: Je ne peux pas obtenir la barre de progression de cette gravure. Voici le code:Barre de progression IMAPI2 dans VB 2008
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é, le gel du programme, et ne répondent pas tant que les données complètement brûlé.
Est-il possible d'arrêter cela, d'arrêter le gel du programme et d'activer la barre de progression?
Merci.
Merci pour votre réponse. Mais maintenant, j'ai un nouveau problème. Lorsque je démarre un nouveau thread, il faut faire tout ce que j'ai fait dans Form1, pour sélectionner le lecteur, le nom, l'enregistreur, etc. car il ne peut pas le reconnaître depuis Form1.CDD3.Write(). Même si je fais tout cela dans Threat, je ne peux toujours pas obtenir de données, car cela nécessite un nouvel enregistrement des données du pilote, mais cela n'est pas autorisé. Pouvez-vous s'il vous plaît écrivez-moi comment faire cela? Juste comment passer des données et des objets du formulaire principal à la classe et retour. Merci. – SharkTheDark
@user: Si vous avez juste besoin d'envoyer des données du thread principal au thread de travail, utilisez la version du constructeur 'Thread' qui prend un' ParameterizedThreadStart', créez simplement une classe pour contenir les données, créez une instance et envoie cette instance en paramètre. Voir ici pour plus d'informations: http://msdn.microsoft.com/en-us/library/1h2f2459.aspx –
Vous pouvez également utiliser cette instance d'objet pour renvoyer des données au thread principal si nécessaire. Faites en sorte qu'il contienne un peu plus de membres pour contenir ces données et faites en sorte que le thread principal en garde une référence. Cependant, si vous utilisez les mêmes données provenant de plusieurs threads, vous devez gérer la synchronisation comme vous pouvez le voir ici: http://msdn.microsoft.com/en-us/library/z8chs7ft.aspx –