Таким образом, вот выдержка из одного из моих классов:
[ThreadStatic]
readonly static private AccountManager _instance = new AccountManager();
private AccountManager()
{
}
static public AccountManager Instance
{
get { return _instance; }
}
Как Вы видите, это - единичный предмет за нить - т.е. случай отмечен признаком ThreadStatic. Случай также иллюстрируется примерами как часть статического строительства.
Так, чтобы имение место, как возможно, что я получаю NullReferenceException в своем заявлении MVC ASP.NET, когда я пытаюсь использовать собственность Случая?
На основе редактирования я предлагаю использовать карту, чтобы она содержала сопоставление имени предпочтения с соответствующим текстовым полем или другим текстовым компонентом. Просто создайте карту при построении пользовательского интерфейса.
Map<String, JTextField> guiFields = new HashMap<String, JTextField>();
Тогда код do
guiFields.get(inputName).setText(value);
-121--2296099- Проблема не в инструкции import
. Проблема в том, что операторы потока управления не работают встроенными в команду python. Замените эту инструкцию import
любой другой инструкцией, и вы увидите ту же проблему.
Подумайте об этом: Питон не может загнать все. Он использует отступы для группирования потока управления.
-121--648832-Предложение MSDN ThreadStartAttribute :
Не указывайте начальные значения для поля, отмеченные ThreadStartAttribute, так как инициализация происходит только один раз, когда выполняется конструктор класса, и поэтому влияет только на один поток. Если начальное значение не указывается, вы можете полагаться на то, что поле является инициализировано до значения по умолчанию, если оно является типом значения или имеет значение null ссылка (Ничего в Visual Basic), если это ссылочный тип.
Это запутанная часть атрибута ThreadStatic
. Несмотря на то, что он создает значение на поток, код инициализации работает только на одном из потоков. Все другие потоки, которые получают доступ к этому значению, получит значение по умолчанию для этого типа вместо результата кода инициализации.
Вместо инициализации значения оберните его в свойство, которое делает для вас инициализацию.
[ThreadStatic]
readonly static private AccountManager _instance;
private AccountManager()
{
}
static public AccountManager Instance
{
get
{
if ( _instance == null ) _instance = new AccountManager();
return _instance;
}
}
Поскольку значение _Instance
_Instance
является уникальным на поток, в свойстве не требуется блокировка, и его можно обрабатывать как любую другое лениво инициализированное значение.
Вы попали в классику [ThreadStatic]
«101» здесь.
Статический инициализатор будет только один раз, , хотя это помечено как [ThreadStatic]
, поэтому другие потоки (кроме первых) увидят этот неинициализированный.
Я верю, что происходит, состоит в том, что статическое поле будет инициализируется только один раз, поэтому, когда другая нить пытается прочитать поле, оно будет нулевым (поскольку его значение по умолчанию), потому что _Instance не может быть инициализированным снова. Это просто мысль, но и я мог бы быть полностью выходить, но это то, что я думаю, происходит.