2012-04-08 5 views
1

Ich versuche Vala zu lernen, also mache ich eine kleine GUI-Anwendung. Meine Hauptsprache war vorher C#, also läuft es ziemlich gut.Gibt es eine Entsprechung zu .NET's BackgroundWorker in Vala?

Allerdings habe ich jetzt die Wand getroffen. Ich muss eine Verbindung zu einem externen Netzwerkserver (mit GIO) herstellen, der meinen Client nicht sofort beantwortet. Dies bewirkt, dass die GUI einfriert, während sich das Programm verbindet und seine Sache macht.

In C# würde ich in diesem Fall wahrscheinlich einen BackgroundWorker verwenden. Ich kann jedoch nicht so etwas für Vala finden.

Grundsätzlich habe ich eine MainWindow.vala, wo ich ein Signal für das Klicken auf eine bestimmte Schaltfläche an eine Methode angeschlossen, die eine neue Instanz von ProcessingDialog.vala erstellt. Dies zeigt einen Dialog über das MainWindow, den der Benutzer sehen soll, während das Programm die Arbeit macht (Verbindung zum Server, Kommunikation).

Was sind meine Alternativen, damit dieses Szenario funktioniert?

Antwort

0

lethalman oben Antwort macht, die wohl Sinn, eine asynchrone Anfrage wird wirklich die beste Wette sein, wenn Sie einen Netzwerkanruf tätigen. In anderen Fällen können Sie Vala's eingebaute thread support verwenden, um eine Hintergrundaufgabe zu erledigen. Es sieht schon bald so aus, dass es eine bessere Bibliothek geben wird, aber das ist stabil.

// Create the function to perform the task 
public void thread_function() { 
    stdout.printf("I am doing something!\n"); 
} 

public int main(string[] args) { 
    // Create the thread to start that function 
    unowned Thread<void*> my_thread = Thread.create<void*>(thread_function, true); 

    // Some time toward the end of your application, reclaim the thread 
    my_thread.join(); 

    return 1; 
} 

Denken Sie daran, mit der Option "- thread" zu kompilieren.

Verwandte Themen