投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/3/12 15:06:18
> ローカルで宣言してるためでしょうか?

『ローカル変数』だけを使うのであれば安全です。しかし、
『フィールド変数』をスレッド間で共有することは避けてください。

同一スレッド間であれば、フィールド変数を共有してもまったく問題ありませんが
複数のスレッドから同じフィールド変数を同時に読み書きするのは原則 NG です。

どうしても共有するなら、同時実行制御の仕組みを設けて、書き込み完了まで
他スレッドの読み取りを完全にロックするなど、排他制御をしっかり組み込む必要があります。


処理を分割できる場合は、Task(Of 進捗状況) を戻り値とする Async Function にして
それを繋いで処理するか、もしくは、Progress(Of 進捗状況) 型を利用する方法が使えます。
https://docs.microsoft.com/ja-jp/dotnet/api/system.progress-1
http://outside6.wp.xdomain.jp/2016/07/25/post-91/


あるいは先の例のように、BackgroundWorker などのイベントベースの通知機構を用いるとか、
もしくはワーカースレッドから Invoke メソッドを通じて実行させるという手もあります。
http://blog.livedoor.jp/gab_km/archives/765026.html

もしい¥ BackgroundWorker を使う場合は、過去に何度か注意点を
投稿していたと思うので、過去ログを検索してみてください。