【问题标题】:Static variables becoming null静态变量变为空
【发布时间】:2016-05-19 09:01:07
【问题描述】:

我在一个解决方案中有两个项目(将它们视为 project1 和 project2)。第一个项目(project1)包含一个保存全局变量的类

public static class GlobalTrackInfo
{
    public static string tracktitle { get; set; }
    public static Uri trackUri { get; set; }
}

我在 project2 中添加了 project1 的引用,并在 project2 的一个类中为静态变量设置了如下值

GlobalTrackInfo.tracktitle = "myTitle";
GlobalTrackInfo.trackUri   = new Uri("www.example.com");

后来我尝试在一个project1的类中访问这些变量作为

Title = GlobalTrackInfo.tracktitle;

但它似乎为空。我究竟做错了什么? 不可以跨项目使用全局变量吗?

【问题讨论】:

  • 你的程序是多线程的吗?
  • 几乎不可能回答这个问题,因为我们不知道该变量的值设置在哪里。您可以通过“查找所有引用”检查所有位置,也可以将字段更改为属性并向设置器添加断点
  • 不,它不是多线程的。
  • 变量只设置一次。
  • project2 是否加载在单独的应用程序域中??

标签: c# .net static-variables


【解决方案1】:

当两个项目有自己的 AppDomain 时,您不能在它们之间共享静态变量。根据 MSDN 文档:

默认情况下,每个使用 DLL 的进程都有自己的所有 DLL 全局变量和静态变量..

如果您想这样做,最好使用其他方法,例如网络通信 (IPC) 或类似的方法。

【讨论】:

  • 我可以有一个在另一个 DLL 中引用的 DLL....第二个 DLL 由 exe 引用...所以第一个 dll 中的静态变量将是可访问的,并且在 exe 终止之前将一直存在...基本上静态变量将一直存在,直到您将其加载到的域中卸载
  • 有关参考,请参见例如Application Domains 在 MSDN 上的 .NET Framework 开发指南中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多