Я создал асинхронный запрос WebClient внутри класса следующим образом:
public class Downstream
{
public bool StartDownstream()
{
WebClient client = new WebClient();
client.Headers.Add("user-agent", "Mozilla/4.0 [...]");
client.Headers.Add("Content-Type","application/x-www-form-urlencoded");
try
{
byte[] postArray = Encoding.UTF8.GetBytes("somevar=foo&someothervar=bar");
Uri uri = new Uri("http://www.examplesite.com/somepage.php");
client.UploadDataCompleted +=
new UploadDataCompletedEventHandler(client_UploadDataCompleted);
client.UploadDataAsync(uri, postArray);
}
catch (WebException e)
{
MessageBox.Show("A regular Web Exception");
}
catch (NotSupportedException ne)
{
MessageBox.Show("A super Web Exception");
}
return true;
}
void client_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
{
MessageBox.Show("The WebClient request completed");
}
}
Затем я создаю новый экземпляр класса и запускаю метод здесь:
Downstream Downstream1 = new Downstream();
Downstream1.StartDownstream();
Когда я это делаю, поток, в котором работает форма, кажется, зависает, пока WebClient не получит ответ. Почему это? Я использовал метод UploadDataAsync
, поэтому он не должен быть асинхронным?
Edit:
Это мой стек вызовов:
[External Code]
> Arcturus.exe!Arcturus.Downstream.StartDownstream() Line 36 + 0x18 bytes C#
Arcturus.exe!Arcturus.MainWindow.btnLogin_Click(object sender, System.Windows.RoutedEventArgs e) Line 111 + 0x12 bytes C#
[External Code]
Это все, что происходит, когда я запускаю свое приложение, просто зависая на методах StartDownstream()
и client.UploadDataAsync(uri, postArray);
.