我们在 IIS6 中托管的 Web 服务中使用了第三方 dll。问题是一旦这个 dll 被加载到内存中,如果一个与创建它的线程不同的线程试图执行 dll 中的任何代码,就会抛出异常AccessViolationException 。工作进程是多线程的,每次调用 Web 服务都会从池中获得一个随机线程。我们试图从内存中卸载它并在每次需要时重新加载它,但我猜只有前端是 .Net,其余的是非托管的,因此它实际上从未完全从内存中卸载。我们正在使用 VB 和 .Net 2.0。有什么建议么?
(对罗伯·沃克的回应)
我们考虑过创建一个新线程并使用它来调用 dll,但是我们如何让线程坐下来等待调用呢?如何在没有 .Net 3.0 提供的 Dispatcher 类的情况下将调用委托给线程?创建一个隐藏表单并将其放入消息循环中可能会起作用。然后我们可以调用表单的 Invoke() 方法。但是,如果我们在 IIS 托管的 Web 服务中创建表单,我会看到很多问题。