Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как исключить повторное выполнение кода

4.0K
14 марта 2007 года
vesna
71 / / 04.10.2005
Здравствуйте.
Такая вот проблема. (С#, .NET 2.0)
Есть страница с четырьмя панелями.
на первой панели кнопка, которая запускает что-нибудь. В моём случае - отправку письма. Поскольку скорость интеренета у всех разная, отправка может занимать много времени. Необходимо, чтобы в течение этого времени кнопку "Отправка" нажать было нельзя.
Я делаю так:
основной процесс прячет первую панель и показывает панель с текстом, типа "Подождите". Создаю еще один процесс, который выполняет отправку.
По идее, этот процесс по окончании отправки должен показывать панель с сообщением, что всё ОК. Этого не происходит. Панель с надписью "Подождите" висит все время и никуда не хочет деваться. При этом почта уходит.
Если же почта не отправляется, то панель с собщением об ошибке отображается нормально и "Подождите" исчезает.
В чем проблема? Знает кто-нибудь?

Написал вот так:
Код:
protected void Page_Load(object sender, EventArgs e)
    {
        pnlOK.Visible = false;
        pnlProc.Visible = false;
    }
    protected void btnClicked(object s, EventArgs e)
    {
        pnlProc.Visible = true;
        pnlMain.Visible = false;
        pnlOK.Visible = false;
        Thread thrExec = new Thread(new ThreadStart(Process));
        Thread.Sleep(500);
        thrExec.Start();
    }
    private void Process()
    {
        int n;
        for (int i = 0; i < 100000000; i++)
        {
            n = i;
        }
        pnlOK.Visible = true;
        pnlMain.Visible = false;
        pnlProc.Visible = false;
    }

Не работает. (pnlOK не отображается, pnlProc не пропадает)
9.0K
15 марта 2007 года
Shit_Happenes
58 / / 05.10.2006
Попробуй использовать BackgroundWorker вместо создания нового процесса.
Информацию можно найти в MSDN. Если надо могу послать пример использования.
4.0K
15 марта 2007 года
vesna
71 / / 04.10.2005
спасибо, попробую
273
16 марта 2007 года
3A3-968M
1.2K / / 22.12.2005
Доступ к элементам из потока, в котором не были соданы эти элементы управления запрещён, отсюда и результат - ничего не работает. Для обращения к контролам из другого потока надо использовать синхронизированный метод Invoke этого контрола, например, pnlOk.Invoke а в него передавать код, который будет уже в родном для контрола потоке выполняться
4.0K
16 марта 2007 года
vesna
71 / / 04.10.2005
2ЗАЗ: спасибо.
Буду пробовать. BackgroundWorker не прокатит, мне кажется. Он для Win Forms более подходит.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог