【发布时间】:2012-02-21 19:09:21
【问题描述】:
我正在编写基于来自第三方(无源)的 COM 对象的应用程序,包含在我的应用程序引用中。 COM 对象创建了某些会计数据的镜像,因此可以以另一种格式(专有格式->MSSQL)读取它。该应用程序是 COM 对象的包装器,允许在其中进行交互; COM 对象本身会定期检查专有文件以查看它们是否已更新,如果有则复制它们。
我们有很多客户,每个客户都有自己的专有格式帐户。我们正在从以前的应用程序转换,一旦完成,我们将有大约 50 个客户端以这种方式运行。我已经有一个仅适用于一个客户端的应用程序,而且我认为让 50 个应用程序的副本不断运行是没有好处的,尤其是当 COM 似乎存在缓慢的内存泄漏时 (argh)。因此,我正在尝试编写的程序将以一种或另一种方式将各种客户端分组,并在后台为每个客户端运行 COM,而前台允许额外的交互,并在需要时重新启动 COM 对象。
起初我尝试使用 Threads/BackgroundWorker,这似乎工作正常,但经过一番摸索后发现,尽管在为客户端创建的每个类上都将 COM 对象声明为 New,但所有客户端都共享相同的COM 实例,所以只有最新加载的客户端才会做任何事情。
虽然肯定是我做错了(如果可能,请说出来!如果有帮助,我会发布我的代码),但似乎我需要一种加载方法为程序中的每个客户端提供一个单独的 .DLL 实例;可悲的是,这比我现在的水平更高。我一直在阅读应用程序域和反射,但从我所能发现的一点点来看,我似乎无法轻松调用方法并且可能无法使用事件(我依靠它来更新信息在应用程序中。)
tl;dr: 加载单独的 DLL 实例以便我可以操纵信息并监听来自 COM 对象的事件的最佳方法是什么?
【问题讨论】:
标签: .net multithreading dll appdomain