库中的共享变量是否在引用该库的所有应用程序中共享它们的值?

Is Shared variable in library shared their value across all application that referring that library?

这可能是重复的。但是,我找不到及时的解决方案。请帮帮我。

我有一个库项目,它有一个名为 GetData(ByVal contextId as Integer) 的 class 函数,用于从数据库获取数据并将它们存储到名为 Public Shared _ContextData As String 的共享变量中。并且,这个库项目被三个 window 应用程序引用。

如果我的所有三个 windows 应用程序同时 运行 并尝试使用该库中的上述方法从数据库中获取具有不同 contextId 的数据。

是否有可能在应用程序中共享任何人的 contextId 值?

我已经提到了下面的链接。但是,他们说的是web应用的解决方案。

Link 1

Link 2

不,Shared 变量绑定到 ApplicationDomain(通常每个进程有一个)。因此,在您的情况下,windows 应用程序的每个进程在内存中都有一个单独的变量。如果您 运行 每个 windows 应用程序,您将有 3 个,如果您 运行 每个 windows 应用程序的两个实例,您将有 6 个独立的变量.

如果您想跨进程边界共享价值,则必须研究跨进程通信技术,例如 WCF 或命名管道通信。此外,创建服务也是一种选择。

一个更简单的选择是将值存储在数据库或每个应用程序访问的文件中。在这两种选择中的任何一种中,您都需要考虑当两个应用程序同时访问该值时如何处理并发情况。

如果contextId选择后没有变化,一个选项是有一个主应用程序并在这个应用程序中选择contextId。您将从该主应用程序启动其他应用程序(例如使用 Process.Start)并将 contextId 作为命令行参数传递。这些 "child"-应用程序使用启动时提供给它们的 contextId

恐怕

Shared 仅在每个应用程序中共享, 并非所有 应用程序共享。加载 DLL 时,您将其加载到应用程序的内存中,因此每个应用程序都有自己的库实例加载到应用程序内存中(这就是为什么 Shared 不能跨应用程序工作)。

如果您想在多个应用程序之间共享数据,您应该查看 Memory Mapped Files