Элементы пользовательского интерфейса, такие как TreeView, должны оставаться в конце пользовательского интерфейса. Для этого есть технические причины - Windows не позволяет обновлять элементы пользовательского интерфейса из каких-либо потоков, кроме основных потоков пользовательского интерфейса, но также и по архитектурным причинам: ваш внутренний код доступа к БД не должен быть тесно связан с какой-либо конкретной реализацией пользовательского интерфейса. Если вы решите переключиться с TreeList на другой элемент управления DevExpress или любого другого поставщика, вам придется заменить код по всей вашей системе.
То, что вы хотите сделать, - это чтобы ваш внутренний код создал более общую структуру данных, например список бизнес-объектов с иерархической структурой, например:
public class MyBusinessObject
{
public string Name {get;set;}
public List<MyBusinessObject> ChildObjects {get;}
}
и верните список MyBusinessObject
из вашей фоновой ветки. Этот список должен быть связан с вашим TreeList с помощью привязки данных. Вы не указали, какую платформу пользовательского интерфейса вы используете - XtraaTreeList - это элемент управления WinForms, верно? - но во всех распространенных инфраструктурах есть опции привязки данных для привязки этого списка бизнес-объектов к элементу управления пользовательского интерфейса, а не для того, чтобы вы делали всю работу самостоятельно.