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

Ваш аккаунт

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

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

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

C# Фоновое подключение к серверу

7.6K
19 апреля 2007 года
bmn
27 / / 01.08.2005
Пишу что-то вроде LoginControl'а. Похож по интерфейсу на MSN (Live) Messenger - Форма логина.
Нужно при нажатии на кнопку "Login" подключиться к серверу и сверить даныне о пользователе. Но если подключаться (HttpWebRequest) в главном потоке, то форма на время соединения с сервером "подвиснет".

Чтобы это предотвратить нужно использовать новый поток? или есть способ более простой?
с потоком будет достаточно накладно, т.к. его закрывать надо будет при "Отмене" или закрытии, потом заново возобнавлять..

Кто сталкивался или знает чем помочь -- не проходите мимо! Может быть я вообще не в ту сторону смотрю?

Заранее благодарен.
273
19 апреля 2007 года
3A3-968M
1.2K / / 22.12.2005
Лучшее решение - только в отдельным потоке или через компонент BackgroundWorker. МОжно в код процесса регистрации пользователя вставить Application.DoEvents(), что выполняет обработку всех Windows-сообщений и форма реагирует на действие пользователя.
7.6K
19 апреля 2007 года
bmn
27 / / 01.08.2005
Спасибо. тогда при нажатии на кнопку "Отмена" нужно сделать worker.CancelAsync();
и он разве сможет оборвать соединение???
273
20 апреля 2007 года
3A3-968M
1.2K / / 22.12.2005
Нет конечно, обрывать соединение придётся вручную, через событие RunWorkerCompleted.
7.6K
20 апреля 2007 года
bmn
27 / / 01.08.2005
наверное я не совсем так выразился, или чего-то "недопонял".

при нажатии на кнопку "Вход" запускаем BackgroundWorker (далее worker).
при нажатии на кнопку "Отмена" мы должны его Закрыть.

Код:
public void worker_DoWork(object sender, DoWorkEventArgs e)
{
    try
    {
        HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://localhost/megasystem/logon.php");
        myReq.Timeout = 15000;
        myReq.Credentials = CredentialCache.DefaultCredentials;
        HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
        if (myResp.StatusCode == HttpStatusCode.OK)
        {
            Status = 1;
        }
        myResp.Close();
    }
    catch (WebException we)
    {
        Status = 2;
    }
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
    {
        MessageBox.Show(e.Error.Message);
    }
    else if (e.Cancelled)
    {
        MessageBox.Show("cancelled");
    }
    else
    {
        MessageBox.Show("Done!");
    }
}

так вот реально ли как-то, чтобы при CancelAsync сразу оборвали соединене? отловить как-то что CancellationPending сработало, а не дожидаться конца соединения и тогда проверять закрыт ли воркер..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог