Передача значений и из фонового работника
Я новичок-самоучка, экспериментирующий сАлгоритм шифрования RijndaelРанее я заставлял его работать очень хорошо, но после попытки запустить шифрование на фоновом рабочем месте для освобождения формы для пользователя я столкнулся с многочисленными проблемами.
Во-первых, я попытался просто поместить byval's, который я использовал в моем предыдущем коде, в фоновый рабочий, но я получил ошибку из-за его несовместимости.ByVal Direction As CryptoAction
.
Чтобы было ясно, я пытался что-то вроде этого:
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
Но, как я уже сказал, мне сказали «Направление», поскольку CrytoAction не было совместимым. В интересах завершенности этот саб был:
Private Enum CryptoAction
'Define the enumeration for CryptoAction.
ActionEncrypt = 1
ActionDecrypt = 2
End Enum
Поэтому, чтобы заставить код работать, я сделал это, и я думаю, именно поэтому мои зашифрованные файлы расшифровываются в нечитаемый файл, и я иногда получаю сообщение об ошибке:Заполнение недействительно и не может быть удалено, при закрытии файлового потока.
Таким образом, я объявил bytkey, byIV, Direction и остальные в моем Public Class, это, как я уже сказал, пусть код выполняется. Но я могу вернуть файл после шифрования. Я думаю, что когда мой код ссылается на функции, вместо получения возвращенного значения, он получает пустую строку?
Вот код, который ссылается на функции, которые генерируют ключи, просто чтобы понять, что я имею в виду.
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
Итак, мой вопрос в том, прав ли я, что код ссылается на обнуленные значения из объявлений, или код все еще ссылается на функции? И возможно ли добавить ByVal CryptoStream в фоновый рабочий?
Я искренне извиняюсь за размер моего вопроса, я везде искал решение, но не могу найти что-нибудь подходящее.