繁体   English   中英

无法更新静态属性

[英]failed to update a static property

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)
    • ...
  • 类库

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

编辑2:

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

编辑3:

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

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

请注意,为了能够在excel插件中使用= testFunc() ,需要在自动化服务器列表中找到并启用它。 因此,只需转到File-> Option-> Addin-> Un Manage Manage-in-> Click GO-> Automation-> Ebale ClassLibrary1.UDF

在启动调试器之前,还请检查是否已启用“ 注册COM互操作 ”选项。 要找到它,请转到ClassLibrary1属性-> Build->在Output下,选中Register for COM interop

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

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; 
            }
    }
}

然后,您可以监视调试器并在计数器上设置断点,这将使您找出代码的哪一部分在不当地修改了计数器。 静态计数器将在访问之前“某些时候”初始化。 我要说的是,您正在设置计数器,并且某些地方在读取之前会立即将其递增。

最后,我认为我找到了一种解决方法,尽管它与静态无关。 我有点受在Web应用程序中使用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");
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM