У нас есть очень старое устаревшее приложение vb6, у которого есть один глобальный объект, который служит ядром приложения, хранит различные настройки приложения, вызывает операции с базой данных и так далее. Несколько модулей с разными прогидами используют этот глобальный объект и не имеют с ним проблем из-за однопоточного апартамента.
Не так давно было создано новое приложение WPF, обеспечивающее переход с vb6, однако оно все еще ограничено наследием vb6 из-за некоторых архитектурных ошибок. Он может подключаться только к одной базе данных для каждого экземпляра приложения. Он содержит статический экземпляр глобального объекта vb6 в классе оболочки, который служит мостом для достижения унаследованных функций.
Сейчас мы разрабатываем новое приложение, которое не должно быть ограничено старым устаревшим кодом, в частности, новое приложение должно иметь возможность подключаться к нескольким базам данных одновременно, но есть загвоздка: код vb6 ограничен одной базой данных, поэтому должен быть несколько экземпляров глобальных объектов vb6, по одному на каждую базу данных.
Возникает вопрос: возможно ли это, и если да, то как можно использовать несколько отдельных экземпляров глобальных объектов vb6 в одном приложении C #?
Я предполагаю, что каждый экземпляр такого объекта должен жить в своем собственном STA-потоке, но я не знаю, как создавать такие потоки, которые поддерживаются в течение всего времени выполнения приложения и имеют связанные оболочки, содержащие экземпляры глобальных объектов vb6 и поддерживающие вызов некоторых функций из потока GUI (а как организовать такое межпотоковое взаимодействие, thread.invoke (...)). Я думал об использовании модели диспетчеризации wpf (класс оболочки - DispatcherObject, у каждого экземпляра есть собственный Dispatcher с собственным STA-потоком), но я не вижу, как это реализовать. Также я думаю, что это можно реализовать, загрузив каждый экземпляр класса оболочки (статический) в разные домены приложений, но я не знаю, решает ли он проблему STA для COM.