Werte an und von Background Worker übergeben

Ich bin ein Autodidakt und experimentiere mit demRijndael Verschlüsselungsalgorithmus, Ich habe es zuvor sehr gut zum Laufen gebracht, aber seitdem ich versucht habe, die Verschlüsselung auf einem Hintergrund-Worker auszuführen, um das Formular für den Benutzer freizugeben, bin ich auf zahlreiche Probleme gestoßen.

Zunächst habe ich versucht, die Byvals, die ich in meinem vorherigen Code verwendet habe, in den Hintergrundworker zu platzieren, aber es ist ein Fehler aufgetreten, der dazu führt, dass sie nicht kompatibel sinByVal Direction As CryptoAction.

Um klar zu sein, ich habe so etwas versucht:

Private Sub bw_DoWork(ByVal sender As Object,ByVal strInputFile As String,
                                     ByVal strOutputFile As String,
                                     ByVal bytKey() As Byte,
                                     ByVal bytIV() As Byte,
                                     ByVal Direction As CryptoAction, ByVal e As DoWorkEventArgs)


    Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)

    For i = 1 To 1
        If bw.CancellationPending = True Then
            e.Cancel = True
            Exit For
        Else

            'Encryption code goes here. 
end sub 

Aber wie gesagt, mir wurde gesagt, dass die Richtung als CrytoAction nicht kompatibel sei. Im Interesse der Vollständigkeit war dieses Sub:

Private Enum CryptoAction
        'Define the enumeration for CryptoAction.
        ActionEncrypt = 1
        ActionDecrypt = 2
    End Enum

Also, um den Code zum Laufen zu bringen, habe ich das gemacht und ich denke, das ist der Grund, warum meine verschlüsselten Dateien in eine unlesbare Datei entschlüsselt werden und ich manchmal den Fehler bekomme:Padding ist ungültig und kann nicht entfernt werden. beim Schließen des Dateistreams.

So habe ich den bytkey, byIV, Direction und den Rest in meiner Public Class deklariert, dies, wie gesagt, den Code laufen lassen. Aber ich kann die Datei wieder verschlüsselt bekommen. Ich denke, wenn mein Code auf die Funktionen verweist, anstatt den zurückgegebenen Wert zu empfangen, wird eine leere Zeichenfolge empfangen?

Hier ist der Code, der auf die Funktionen verweist, die die Schlüssel generieren, um klar zu sein, was ich meine.

                 Select Case Direction
                        Case CryptoAction.ActionEncrypt
                            csCryptoStream = New CryptoStream(fsOutput, _
                            cspRijndael.CreateEncryptor(bytKey, bytIV), _
                            CryptoStreamMode.Write)

                    Case CryptoAction.ActionDecrypt
                        csCryptoStream = New CryptoStream(fsOutput, _
                        cspRijndael.CreateDecryptor(bytKey, bytIV), _
                        CryptoStreamMode.Write)
                End Select

Also, meine Frage ist, habe ich Recht, dass der Code auf Nullwerte aus den Deklarationen verweist, oder würde der Code immer noch auf die Funktionen verweisen? Und ist es möglich, den ByVal CryptoStream dem Background Worker hinzuzufügen?

Meine aufrichtige Entschuldigung für die Größe meiner Frage, ich habe überall nach einer Lösung gesucht, kann aber nichts Relevantes finden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage