投稿者 るきお  (社会人) 投稿日時 2020/10/26 08:23:01
解決してよかったです。

マルチスレッドは難しいです。私は避けられるなら避けます。
例外処理やスレッド間の連携や、今回のようなスレッドアフィニティ(≒特定のスレッドで実施させたい)の問題。
こういった問題を解決するためにSyncronizationContextやExecutionContextなどの仕組みもあります。

System.Threading.Threadはマルチスレッドの機能としては古く、2008年ごろだったかにはTPL(System.Threading.Tasks,Task)が登場しています。その後、さらに簡単で非同期実行を実現する高機能な言語機能としてAyncとAwaitが登場しました。
どうしてもマルチスレッッド/非同期処理が必要な場合は、新しい機能から検討されると良いと思います。

私の知っている限りでは言語機能としてここまで強力なマルチスレッド機能があるのはVBとC#くらいではないかと思います。

下記の本は.NETのマルチスレッドについて体系的に説明してくれていてお勧めです。

プログラミング C#
https://www.amazon.co.jp/exec/obidos/ASIN/4873116503/vbschool-22



C#の本ですが、.NET FrameworkについてはVBもC#も同じですし、言語機能である Async, AwaitにつてもVBとC#で同じで参考になります。
この本はマルチスレッドだけの本ではありませんが、第17章 マルチスレッドが49ページ、第18章 非同期言語処理が20ページあり、かなり読み応えがあります。