>>56
1:
Synchronizeを呼び出す別のメソッドを定義すればよい。
ファイル名や進行状況の値をクラスの変数などにして。

2:
ファイル名など排他制御が必要なものだけSynchronizeまたはクリティカルセクションで保護して更新。(取得時も保護ね)
進行状況の値は32bitの変数などで保護なしで更新もあり。
GUIの更新はタイマで定期的にそれらの値を参照して行う。
こっちの方法はGUIの更新頻度を一定にできるので負荷が少ない。

被ってる内容だが2が個人的にお勧め。1だと大抵の場合処理が遅くなるし負荷も高い。