[英]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
类库
编辑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.