![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
setnull |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
Люд, представьте себе следующую ситуацию:
Компонент { ... private bool _active = false; public bool Active { get { return GetActive(); } set { SetActive(value); } } protected bool GetActive() { return _active; } ... } При его использовании, следующий код (который используется как делегат) if (this.ServerSocket1.Active) lbCCount.Text = String.Format("Active. Conections: {0}", this.ServerSocket1.ConectionCount); else lbCCount.Text = "Inactive"; в случаях Active == false работает нормально. При true - ничё не происходит ![]() При трассировке, на свойство Active говорит Name Value Active Function evaluation disabled because a previous function evaluation timed out. You must continue execution to reenable function evaluation. Хотя, если ПЕРЕД ифом кинуть че-нить вроде MessageBox.Show(String.Format("Active: {0}, {1}", act, this.ServerSocket1.ConectionCount)); , то выведет "Active: True, 1" ![]() Мало того - это все в рамках Visual Studio. Если выполнять непосредственно exe-шник - все работает... I ![]() |
|||
|
||||
emmanuil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
private bool _active = false;
public bool Active { get { return GetActive(); } set { SetActive(value); } } protected bool GetActive() { return _active; } Уже же есть методы get и set в свойстве. Либо тогда вообще не используй свойство, а только методы, тогда будет в стиле Java. |
|||
|
||||
Zakonnic |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 25.4.2006 Репутация: 2 Всего: 6 |
public bool Active { get { return _active; } } --------------------
...и никогда не пишите в комментариях правду |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Погуглить было очень трудно?
Вот вам и ответ на поставленный вопрос. По сути, достаточно лишь представить себе как работает отладчик. Вот вы навели курсор на свойство объекта и хотите посмотреть его значение.. Как студии его вычислить, чтобы потом отобразить? В большинстве случаев всё банально: если getter просто возвращает какое-то поле класса, студия об этом "догадывается" и отображает это поле, минуя выполнение getter-а. Если же getter возвращает что-то хоть чуточку более сложное, метод-аксессор всё-таки придётся выполнить. Но как? Ведь getter находится в вашем коде, а сейчас отладчик стоит на конкретной строчке этого кода и не может вдруг броситься выполнять какой-то метод, чтобы узнать значение свойства. Выполнить метод в другом потоке по понятным причинам нельзя. Вот вам и ошибка. |
|||
|
||||
setnull |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
Ну по порядочку... 2emmanuil (почти теска) private bool _active = false; На данный момент это просто эМУЛЯЖ... На самом деле логика GetActive() намного сложнее... Просто, когда я изначально столкнулся с таким беспределом, подумал, может это из-за lockов и потоков там ких-нить... Для проверки - вот, все равно... |
|||
|
||||
setnull |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
2Zakonnic Ну ничего себе... Если на это закрыть глаза ( ну да, пускай, это же .NET Framework, он ведь еще так молод...), то кААк я могу быть уверен, что он мне завтра в релизе не скжет: "Ой, [%username], прости, мол, по вторникам у меня 5 % 3 == 7..." Хотя, постой... Что ты подрозумеваешь под "дебагер"? С помощью трассировки, я только хотел уточнить, че там происходит... Но и при обыкновенном выполнении кода (без трассировки, без breakpointов, просто F5)
при значениях Active == true (это только закономерность...) отрабатывает только код строки 0х00 по поводу get { return _active; } см 2emmanuil Это сообщение отредактировал(а) setnull - 4.7.2007, 18:17 |
|||
|
||||
setnull |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
2Exception Так смысл сообщения не обязятельно гуглить, можа и лингвой... ![]() Суть то в том, что бок не только при трассировке... см 2Zakonnic Это сообщение отредактировал(а) setnull - 4.7.2007, 18:33 |
|||
|
||||
emmanuil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
setnull, если в GetActive() какие-то сложные действия, тогда темболее откажись от свойства, используй методы. Нужно не забывать, что свойство - это доступ к полям класса и они не для сложных вычислений (конечно смотря какая сложность!).
У меня тоже был один глюк и довольно странный. Было два обработчика события (уже не помню какие). Если во втором обработчике нет ни строчки кода, то в первом все работает нормально, если же во втором есть код, то во втором об-ке было следующее: заходил в обработчик несколько раз : в первом заходе отрабатывал первую строчку кода а во втором последнюю. Я был в шоке! ![]() Так и не понял в чем дело. Конечно может я что-нибудь намудрил?! Но это как намудрить то надо, чтоб такое было?! |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Я надеюсь, этот "делегат" выполняется в главном потоке приложения?
Добавлено через 3 минуты и 22 секунды emmanuil, это никак не может быть проблемой фреймворка ![]() |
|||
|
||||
setnull |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
2Exception Блин, так и есть... бастрый вопрос: как VS заставить отображать отловленные исключения? Потоки не могут поделить lbCCount Так а че ж делать? lock(lbCCount) тоже не помогает... Это сообщение отредактировал(а) setnull - 5.7.2007, 20:17 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
setnull, Модератор: Пожалуйста, один топик - один вопрос.
А лочить можно любой объект, лучше всего завести какое-нибудь статик-поле с любым типом. -------------------- ![]() |
|||
|
||||
emmanuil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
emmanuil, но как тогда объяснить? Никаких потоков небыло и ничего такого я не делал, просто сделал обработчики и все. (DevExpress компоненты, мож в них глюк?)
Добавлено через 3 минуты и 26 секунд Вот взял по запарке и себя вписал ![]() Обращение было к Exception'у |
|||
|
||||
emmanuil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
RepositoryItemComboBox.
По несколько раз заходит в обработчик события изменения индекса |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
emmanuil, как это относится к первому вопросу? Про девэкспресс можно в отдельной ветке спросить.
-------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |