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!");
}
}
C# Фоновое подключение к серверу
Нужно при нажатии на кнопку "Login" подключиться к серверу и сверить даныне о пользователе. Но если подключаться (HttpWebRequest) в главном потоке, то форма на время соединения с сервером "подвиснет".
Чтобы это предотвратить нужно использовать новый поток? или есть способ более простой?
с потоком будет достаточно накладно, т.к. его закрывать надо будет при "Отмене" или закрытии, потом заново возобнавлять..
Кто сталкивался или знает чем помочь -- не проходите мимо! Может быть я вообще не в ту сторону смотрю?
Заранее благодарен.
Лучшее решение - только в отдельным потоке или через компонент BackgroundWorker. МОжно в код процесса регистрации пользователя вставить Application.DoEvents(), что выполняет обработку всех Windows-сообщений и форма реагирует на действие пользователя.
и он разве сможет оборвать соединение???
Нет конечно, обрывать соединение придётся вручную, через событие RunWorkerCompleted.
при нажатии на кнопку "Вход" запускаем BackgroundWorker (далее worker).
при нажатии на кнопку "Отмена" мы должны его Закрыть.
Код:
так вот реально ли как-то, чтобы при CancelAsync сразу оборвали соединене? отловить как-то что CancellationPending сработало, а не дожидаться конца соединения и тогда проверять закрыт ли воркер..