Ich machte eine asynchrone Methode, die 10 mal einen HTTP-Header mit WebRequest anfordert. Solange die URL ungültig ist, funktioniert mein Programm gut. Ist die URL gültig, werden nur zwei Anfragen gesendet.Deadlock mit HttpWebRequest
Um dies zu überprüfen, habe ich zwei Buttons erstellt, einen zum Überprüfen der gültigen URL, einen zum Überprüfen einer ungültigen URL. Wenn ich die gültige URL verwende, wird mein Zähler genau um 2 inkrementiert, aber nur das erste Mal. Das Lustige ist, dass ich immer noch den Knopf für die ungültige URL drücken kann und es funktioniert wie erwartet.
Dies ist die cs-Datei:
public partial class MainWindow : Window
{
int counter = 0;
private async Task DoWork(String url)
{
for (int i = 0; i < 10; i++)
{
HttpWebRequest request = WebRequest.CreateHttp(url);
request.Method = "HEAD";
request.Timeout = 100;
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)await request.GetResponseAsync();
}
catch(Exception ex)
{
}
counter++;
Dispatcher.Invoke(() => label.Content = counter);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
DoWork("http://www.google.ch");
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
DoWork("http://www.adhgfqliehfvufdigvhlnqaernglkjhr.ch");
}
}
Dies ist die XAML-Datei
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label Name="label" Content="Label" HorizontalAlignment="Left" Margin="78,151,0,0" VerticalAlignment="Top"/>
<Button Content="Valid URL" HorizontalAlignment="Left" Margin="64,71,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
<Button Content="Invalid URL" HorizontalAlignment="Left" Margin="144,71,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
</Grid>
</Window>
Kann jemand diesen behavier erklären?
Fyi, müssen Sie die Dispatcher.Invoke nicht brauchen. Das ist eine nette Sache zu erwarten. – usr