Announcement

Collapse
No announcement yet.

GUI soll nicht blockieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • GUI soll nicht blockieren

    Folgendes Problem: Ich habe eine (Compact Framework 2.0) Anwendung geschrieben, welche eine Windows.Forms-Benutzeroberfläche besitzt. Diese Benutzeroberfläche soll, sobald sich die anzuzeigenden Daten ändern, aktualisiert werden.
    Derzeit ist die Aktualisierung der GUI über einen (System.Windows.Forms) Timer realisiert, welcher in etwa alle 2 Sekunden ausgelöst wird und welcher wiederum die Daten berechnen lässt. Die Daten werden über einen Web-Service auf einem Server berechnet, daher dauert das Beschaffen/Berechnen der Daten jedesmal ebenfalls so ca. 2 Sekunden. Das Problem hierbei ist, dass die GUI sehr langsam reagiert, d.h. wenn eine Schaltfläche gedrückt wird, kann es mehrere Sekunden dauern, bis das Programm ein Feedback gibt.
    Daher würde ich das Beschaffen der Daten gerne über einen zusätzlichen, eigenen Thread von der GUI entkoppeln, bloß wie mache ich sowas?

  • #2
    Hallo,

    da es sich hierbei um einen Webservice handelt, muss man nicht von Hand einen eigenen Thread erzeugen, sondern kann den Webservice asynchron aufrufen.
    Einfach die Methode Begin<WebserviceMethodenName> verwenden.

    Vorher muss man eine Rueckrufmethode definieren.
    webserviceCallback = new AsyncCallback(Rueckrufmethode)

    In der Rueckrufmethode ruft man die End<WebserviceMethodenName> auf.
    Das ist sozusagen Multithreading aus der Konservendose.

    Comment


    • #3
      Jupp, ansonsten:

      Public Delegate Sub myDelegate()

      in den Code des Timers dann:

      Me.Invoke(New myDelegate(AddressOf subname))

      Und dann noch die Sub mit der Webrequest und so:

      Private Sub subname()
      'do some stuff
      End Sub

      Comment

      Working...
      X