Код,
который работает в потоке,
обращается к контролу.
Всё работает замечательно, кроме, того что
контрол не есть garbage collector.
В результате утечка памяти.
Код потока завершается,
когда контрол больше не нужен.
Экземпляр контрола передаётся потоку через аргумент при старте потока (_thread.Start(this)). Метод который используется для потока статический.
garbage collector не ест контрол из-за единственной ссылки на контрол из внутреннего класса .net
ThreadHelper._startArgs <- ParameterizedThreadStart._target
Почему остаётся жить ParameterizedThreadStart не понятно. dotMemory показывает что ссылается на него regular local variable, а откуда эта variable не говорит. Возможно в пуле потоков.