![]() |
|
Модераторы: gambit |
![]()
|
|
| alir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 19.3.2005 Репутация: 1 Всего: 4 |
Мне нужно, чтобы некоторая часть кода выполнилась 1 раз (при 1 запуске странице), остальная - неважно. Есть такое свойство?
|
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
выполнится один раз |
|||
|
||||
| alir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 19.3.2005 Репутация: 1 Всего: 4 |
Не все так просто.
Если помесить код в postback вот что происходит:
Ошибка: Object reference not set to an instance of an object. Если же код с заполнением list'a из postback вытащить, но оставть в PageLoad, то сначал все пройдет наромально, но потом он, после действий с формой, вылетет с ошибкой: The process cannot access the file "..." because it is being used by another process. А вылетает при создании StreamReader reader = file.OpenText(); - потому и хотел его выполнять 1 раз. Это сообщение отредактировал(а) alir - 14.10.2005, 17:00 |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 1 Всего: 19 |
код чтения, тебе всетаки придеться выполнять при каждом обращении к странице, вот только внимательно помотри, после чтения ты вызываеш reader.Close() или нет ? |
|||
|
||||
| alir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 19.3.2005 Репутация: 1 Всего: 4 |
Mad
Конечно, вызываю. Вот только потоки каким-то образом накладываются. |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 1 Всего: 19 |
alir
Вообщето не имеет значения, вызываеш или нет (сори, перед этом я просто прикололся С обновлением файлов в ASP.NET вообще тяжко работать (не не расыитана она на это, предпологаеться что все будет через базы идти). Если ты храниш какието данные в файле, то представь себе ситуацию, один юзер только заходит на страницу,а второй ее уже обновляет. И как системма будет одновременно читать, и перезаписывать один и тотже файл ? |
|||
|
||||
| alir |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 19.3.2005 Репутация: 1 Всего: 4 |
Свел проблему к миниму:
после 4-5 выполнения это функции вылетает ошибка:
Вылетает на: StreamReader reader2 = file.OpenText(); Почему??? Накладываются потоки? Это сообщение отредактировал(а) alir - 14.10.2005, 18:49 |
||||
|
|||||
| Mad |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 1 Всего: 19 |
Попробуй так :
а то у тебя закрытие стрима не всегда выполнялось ;) (не во всех if ветках) но этот код всеравно будет работать неустойчиво, при заходенескольких пользователей на эту страницу, он будет давать туже ошибку. Чтоб этого избежать можеш попробывать так (хотя и немного коряво
|
||||||
|
|||||||
| alir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 19.3.2005 Репутация: 1 Всего: 4 |
Mad
Ну вроде работает, правда, если быстро нажимать, начинает долго думать. Все же спасибо. |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 1 Всего: 19 |
от этого тебе не уйти (толко переход на БД). |
|||
|
||||
| arilou |
|
||||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Так. Налицо некоторое непонимание жизненного цикла страницы. Как известно, HTTP - протокол "без состояния". Всякие session, view state и проч. - это уже навороты каждой отдельно взятой среды (ASP.NET, PHP, Java, etc). В ASP.NET страница проходит следующие этапы в своем жизненном цикле: 1. Page init 2. Page load 3. Обработка postback'ов (если они были) 4. Page pre-render 5. Page unload После п.5 страница перестает существовать. Инстанса твоего class MySuperPage : System.Web.UI.Page уже нет. Поэтому, 1. Инстансы всех классов (list = new ArrayList();!!!!!) должны создаваться при каждой инициализации страницы. 2. Другое дело - заполнение контролов значениями и data binding - это должно происходить только в те моменты, когда это тебе нужно. Например, при первом обращении к странице (if(!IsPostBack)) Далее, ты работаешь с файлом. Как правильно заметил Mad, в веб-приложении это совсем не хорошо, потому что веб-приложение априори многопоточное, и программировать под него надо принимая это во внимание. Так что тебе нужно использовать какой-то механизм синхронизации доступа к файлу. Иначе будет:
Переходи на работу с БД. Если же ну никак без файла, то тогда хотя бы не давай нескольким пользователям его модифицировать, иначе будешь получать ошибки
Вот такие, брат, дела. |
||||||
|
|||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |