Нужно в классе "шифраторе" создать событие. Лучше всего шифровать файл вызвав Task.Factory.StartNew, а в конструкторе "шифратора" захватить текущий контекст синхронизации (
SynchronizationContext) и по мере шифрования очередной части потока байт вызывать у контекста синхронизации метод
Post (он не ждёт пока обработчик события отработает до конца) и внутри него уже вызывать событие ProgressChanged у "шифратора".
Чтобы понять, что я имею ввиду, смотри код здесь:
С# Taks и Invoke почему то блокируется форма?