C# 静态对象/多个应用程序域/一个进程

C# 静态对象/多个应用程序域/一个进程,c#,winforms,multithreading,process,appdomain,C#,Winforms,Multithreading,Process,Appdomain,好的,问题是,我有一个winform应用程序,它严重依赖于静态变量,并且是一个单例应用程序(一次只有一个进程实例) 我现在需要创建一个包装应用程序,它将创建6个winform应用程序,并在它们的主窗口之间切换。这样做的原因是,这些应用程序有很多静态引用,必须根据它们连接到的数据库进行更新。我们的用户现在需要连接到多个数据库,重新设计代码以消除静态问题不是一个选项 所以我的问题是,我知道我可以在一个过程中创建新的应用程序域,但是这些应用程序域中的每一个都会得到一组新的静态引用吗?或者我真的必须有单

好的,问题是,我有一个winform应用程序,它严重依赖于静态变量,并且是一个单例应用程序(一次只有一个进程实例)

我现在需要创建一个包装应用程序,它将创建6个winform应用程序,并在它们的主窗口之间切换。这样做的原因是,这些应用程序有很多静态引用,必须根据它们连接到的数据库进行更新。我们的用户现在需要连接到多个数据库,重新设计代码以消除静态问题不是一个选项

所以我的问题是,我知道我可以在一个过程中创建新的应用程序域,但是这些应用程序域中的每一个都会得到一组新的静态引用吗?或者我真的必须有单独的过程吗?如果是这样,我如何构建一个新的应用程序来创建旧应用程序的6个实例,并将数据传递给每个实例(如隐藏/显示、加载此对象、查询此数据库等),寻找一些简单的东西,因为这最终将成为一个一次性项目


谢谢

每个应用程序域都有自己的一组加载程序集(域之间共享的除外)和类型。应用程序域中的每种类型都有其自己的静态变量实例(在域无关程序集CLR以特殊方式提供此实例的情况下)。

每个应用程序域都有其自己的加载程序集集(域之间共享的除外)和类型。应用程序域中的每种类型都有它自己的静态变量实例(在域无关程序集CLR以特殊方式提供的情况下)。

我们的用户现在需要这个“和“这将最终成为一个一次性项目”似乎是矛盾的。是的,看起来确实如此。对于这个临时项目,他们需要它,修复所有静态引用问题所需的时间远远超过了临时好处。在我们的测试阶段完成后,这些都将被丢弃。这确实是我正在寻找的一个解决方案。“我们的用户现在就需要这个”和“这最终将成为一个一次性项目”似乎是矛盾的。是的,看起来确实如此。对于这个临时项目,他们需要它,修复所有静态引用问题所需的时间远远超过了临时好处。在我们的测试阶段完成后,这些都将被丢弃。这确实是我在寻找的一个工作环境。不完全正确。程序集可以通过AppDomains共享。CLR确实为静态添加了一些代码,以隔离AppDomains之间的静态,这使得涉及多个AppDomains时静态变量的速度稍慢。@AloisKraus:好的评论,+1。但是,我希望,这对于主题发起者来说是不现实的。无论如何,我已经更新了答案。不是完全正确。程序集可以通过AppDomains共享。CLR确实为静态添加了一些代码,以隔离AppDomains之间的静态,这使得涉及多个AppDomains时静态变量的速度稍慢。@AloisKraus:好的评论,+1。但是,我希望,这对于主题发起者来说是不现实的。无论如何,我已经更新了答案。