Keeping database access off the main thread

You should "move" the entities into the main thread. But also "move" the manager that holds the threads, so you don't need to handle the memory management and evicting of all entities.

In a thread, create a new manager, retrieve the list, and then "send" the manager to the main form to be used by the main thread. Don't destroy the manager until you know you are done with the entities it holds.