无法更新静态属性

时间:2011-09-13 07:59:46

标签: c# .net static

public static class clsCounter
{
    static int count;

    public static int Counter
    {
        get { return count; }
        set { count = value; }
    }
}

以上是用于记录数字的静态类。

另外,我在VS2010解决方案中有两个项目,其中一个是类库。在其中一个类中,我有以下代码使用clsCounter

if (clsCounter.Counter == 0)
    countIES++;
else
    countIES = 0;

现在,在另一个项目中,我将一些新值设置为clsCounter

clsCounter.Counter = 50;

但是,出于某种原因,我无法将clsCounter.Counter设置为50,因此我总是得到countIES++。代码对我来说没问题,我不知道它有什么问题?有人可以帮忙吗?

感谢。

编辑:

我想知道它是否与vs解决方案中的项目范围有关?

解决方案结构

解决方案

  • ExcelAddIn

    • Form1.cs => (clsCounter.Counter = 50)
    • ...
  • ClassLibrary

    • clsCounter => (静态类)
    • ...

编辑2:

clsCounter.Counter = 50;实际上是在backgroundworker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)事件中运行的。这可能是一个可能的问题吗?

编辑3:

我上传了一个似乎能够重现同样问题的示例项目。这是共享链接:=> http://www.4shared.com/folder/sInyNWyi/_online.html

我想在这里做的是在按下“设置值”按钮后填充值为Other case的单元格。静态类和UDF可以在类库中找到。

请注意,为了能够在excel addin中使用 = testFunc(),需要在自动化服务器列表中找到它并启用它。所以,只需转到文件 - >选项 - >加载 - >在管理加载项下 - >点击GO->自动化 - > Ebale ClassLibrary1.UDF

请在启动调试器之前检查是否启用了“注册COM互操作”选项。要找到它,请转到ClassLibrary1属性 - >构建 - >在输出下,选中注册COM互操作

2 个答案:

答案 0 :(得分:0)

将以下行添加到静态属性:

public static class clsCounter
{
    private static int count;

    public static int Counter
    {
        get { 
               Debug.WriteLine("Counter viewed"); 
               return count; 
            }
        set { 
               Debug.WriteLine("Counter Changed from {0} to {1}", count, value);
               count = value; 
            }
    }
}

然后你可以看到你的调试器并在柜台上设置断点,这样你就可以找出代码的哪一部分正在修改你的计数器。静态计数器将在访问之前“在某个时间”初始化。我会说你正在设置计数器,某些地方会在你阅读它之前立即增加它。

答案 1 :(得分:0)

最后,我认为我发现了一种解决方法,尽管它与静态无关。我有点受到在网络应用程序中使用cookie的想法的启发。

同样,我需要做的就是:

通过执行

将值存储在临时文本文件中
System.IO.File.WriteAllText(@"C:\countIESValue.txt", value);

在“设置值”按钮中单击事件处理程序。

从上面的文本文件中随时读取存储的值并将其分配给局部变量。

if(System.IO.File.Exists(@"C:\countIESValue.txt"))
{
    string val = System.IO.File.ReadAllText(@"C:\countIESValue.txt");
}

完成处理后,也可以删除文本文件。这样,虽然需要写入文件的权限,但我不必担心任何范围或应用程序域问题。我很高兴它对我来说非常合适。