| 

.NET C# Java Javascript Exception

1
Hallo,

ich hab in einer Konsolenanwendung eine Funktion, die Daten asynchron aus dem Internet holt.

class Program
{
static void Main(string[] args)
{
Service service = new Service();
}
}

class Service
{
public Service()
{
SendStringAsync("http://myaddress/", string, new UploadValuesCompletedEventHandler(UploadValuesCompleted));
Console.WriteLine("I'll be back");
System.Threading.Thread.Sleep(3000);
}
}


Klar, dass der Thread dann eine Zeit pausieren muss, bis die Antwort kommt und UploadValuesCompleted aufgerufen wird.

public void UploadValuesCompleted(Object sender, UploadValuesCompletedEventArgs e)
{
Console.WriteLine("I am back");
Console.ReadKey();
}


Das funktioniert auch alles. Der Aufruf passiert, der Thread pausiert, Antwort kommt, UploadValuesCompleted wird aufgerufen, Console.WriteLine gibt Satz aus - und dann wartet das Programm nicht bei ReadKey() sondern verabschiedet sich. Ich bin mit meinem Latein am Ende. Was ist das los? Warum wird ReadKey() ignoriert?
News:
02.02.2011
tack 294 1 8
2 Antworten
3
Sehe ich auch so. Du musst das Console.ReadKey() im Haupt-Thread haben. Also entweder:
class Program
{
static void Main(string[] args)
{
Service service = new Service();
Console.ReadKey();
}
}


oder

class Service
{
public Service()
{
SendStringAsync("http://myaddress/", string, new UploadValuesCompletedEventHandler(UploadValuesCompleted));
Console.WriteLine("I'll be back");
System.Threading.Thread.Sleep(3000);
Console.ReadKey();
}


Dann sollte es funktionieren.
02.02.2011
Potter 76 1 3
2
Vermutung: Weil die UploadValuesCompleted in einem separaten Thread läuft, dieser Thread ein Background-Thread ist, und der Hauptthread nicht auf Background-Threads wartet, sondern das Programm beendet, wenn er mit seinem Kram durch ist.

Der synchrone Aufruf des Service-Konstruktors kommt nach drei Sekunden zurück, danach ist Sense.
02.02.2011
Golo Roden 2,7k 3 9
+1, sehe ich auch so. Hier muss man in den Main-Thread Invoken.
Floyd 02.02.2011
Klar, so geht es. Danke.
tack 03.02.2011

Stelle deine Thread-Frage jetzt!