не удалось обновить статическое свойство - PullRequest
0 голосов
/ 13 сентября 2011
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++. Код выглядит хорошо для меня, и я понятия не имею, что с ним не так? Кто-нибудь может помочь?

Спасибо.

EDIT:

Интересно, это как-то связано с объемом проектов в рамках решения?

Структура раствора

Решение

  • 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 можно найти в библиотеке классов.

Обратите внимание, что для использования = testFunc () в дополнении Excel необходимо найти его в списке серверов автоматизации и включить его. Просто зайдите в File-> Option-> Addin-> Under Manage Add-in-> Нажмите GO-> Автоматизация-> Ebale ClassLibrary1.UDF

Также проверьте, включена ли опция " Регистрация для COM-взаимодействия ", перед запуском отладчика. Чтобы найти его, перейдите в свойство ClassLibrary1 -> Build -> Under Output, отметьте Регистрация для взаимодействия COM .

Ответы [ 2 ]

0 голосов
/ 20 сентября 2011

Наконец, я думаю, что я нашел обходной путь, хотя это не имеет никакого отношения к статике. Я был вдохновлен идеей использования файлов 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");
}

Текстовый файл также может быть удален после завершения обработки. Таким образом, мне не нужно беспокоиться о проблемах области действия или области приложения, хотя требуется разрешение на запись файлов. Я рад, что это сработало довольно хорошо для меня.

0 голосов
/ 14 сентября 2011

Добавьте следующую строку в ваше статическое свойство:

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

Затем вы можете наблюдать за своим отладчиком и устанавливать контрольные точки на счетчике, что позволит вам определить, какая часть кода изменяет ваш счетчик ненадлежащим образом. Статический счетчик будет инициализирован «через некоторое время», прежде чем к нему будет получен доступ. Я бы сказал, что вы устанавливаете счетчик, и что-то где-то немедленно увеличивает его, прежде чем читать.

...