Passando valores para e do trabalhador em segundo plano

Eu sou um novato autodidata experimentando oAlgoritmo de criptografia Rijndael, Eu o fiz funcionar muito bem anteriormente, mas desde que tentei executar a criptografia em um trabalhador em segundo plano para liberar o formulário para o usuário, encontrei vários problemas.

Primeiramente, tentei colocar os byvals que eu usei no meu código anterior no trabalho em segundo plano, mas ocorreu um erro por não ser compatível.ByVal Direction As CryptoAction.

Então, para ficar claro, eu estava tentando algo como isto:

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 

Mas, como eu disse, me disseram que a Direction As CrytoAction não era compatível. No interesse de completude, esse sub foi:

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

Portanto, para que o código funcione, eu fiz isso e acho que é por isso que meus arquivos criptografados descriptografam em um arquivo ilegível e às vezes recebo o erro:O preenchimento é inválido e não pode ser removido. ao fechar o fluxo de arquivos.

Então eu declarei o bytkey, byIV, Direction e o resto da minha classe pública, como eu disse para deixar o código rodar. Mas posso recuperar o arquivo uma vez criptografado. Meu pensamento é que, quando meu código faz referência às funções, em vez de receber o valor retornado, ele recebe uma string vazia?

Aqui está o código que faz referência às funções que geram as chaves, apenas para esclarecer o que estou dizendo.

                 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

Então, minha pergunta é: estou certo de que o código está referenciando valores nulos das declarações ou o código ainda faria referência às funções? E, é possível adicionar o ByVal CryptoStream ao trabalhador em segundo plano?

Meu mais sincero pedido de desculpas pelo tamanho da minha pergunta, procurei por toda parte uma solução, mas não consigo encontrar nada relevante.

questionAnswers(1)

yourAnswerToTheQuestion