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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top