Frage

Ich fange an zu machen Programm, das CD / DVDs brennen, und alles ist in Ordnung. Ich fand Art und Weise mit IMAPI2 API zu verbrennen, aber jetzt habe ich Problem: Ich kann nicht Fortschrittsbalken dieses Brennen erhalten. Hier ist der 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

Wenn Befehl

CDD3.Write (Stream)

ausgelöst wird, Programm einfrieren, und nicht reagieren, bis die Daten vollständig verbrannt wird.

Gibt es eine Möglichkeit, dies zu stoppen, zu Stop-Programm Einfrieren und Fortschrittsbalken ermöglicht?

Danke.

War es hilfreich?

Lösung

Sie müssen Einfädeln verwenden. Also in Ihrem Schaltfläche klicken, um Ereignishandler beginnen einen neuen Thread, der die tatsächliche Verbrennung tut und während das ist los in seiner eigenen Thread, kann der Haupt-Thread weiterhin die GUI aktualisieren (einschließlich Ihrer Statusleiste).

Siehe Thread.Start für eine einfache Probe und wenn Sie möchten, weitere Informationen ich würde vorschlagen, beginnen hier: Managed Threading

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top