皆さんは以下のような機能を実装したい場合にはどうしますか?

「ディレクトリにあるファイルをすべてにたいして適切な加工を施す。」
と言うプログラムを作りたいとします。

これをメインスレッドでやってしまうととんでもないことになるので、別途
ディレクトリの中のファイルを読み出し、適切な加工を施す処理を行う専用スレッドを作って、メインスレッドから
そのスレッドを起動して、処理させるという方法をとりました。

ところが仕様上である制約があるのです。

作業状態をこと細かくメインスレッドのForm上のLabelに報告せねばならない。(ユーザーがなにをしているか分かるように)
たとえば今〜フォルダの〜というファイルを処理しています。
処理結果は進行状態は何%ですといった具合にです。

ところがこれを実装しようとすると、処理専用スレッドの中で、いたるところでSynchronizeメゾットを呼び出さねばならず
スレッドの中はSynchronizeだらけになってしまいます。

これでは大変効率が悪いと思うのですが。皆さんならどのように実装しますか?
お知恵を拝借したいと思います。
長文失礼いたしましたm(_ _)m