IMAPI2 in VB 2008 Fortschrittsbalken
-
04-10-2019 - |
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.
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