[英]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.