SWT table refresh per Thread

Fraiser

Mitglied
Meine Tabelle nutzt eine LookupTabelle, wo der LabelProvider Werte rausholt und anzeigt.

Diese LookupTabelle soll ständig aktualisiert werden (aller 5Sekunden).

Das Runnable soll ungefähr so aussehen:
Java:
   private class RefreshJob implements Runnable
   {
      public void run()
      {         
         while( true )
         {
            refreshLookup();
            try
            {
               Thread.sleep( 5000 );
            }
            catch( InterruptedException e )
            {
               // ignore
            }
         }
      }
   }  
}

Leider blockiert das Runnable die GUI bei Ausführung mit Display.asyncExec( Runnable )

Wie kann ich das Problem beheben?
 
asyncExec verschiebt die Ausführung des Runnables in den UI Thread, daher blockiert die Oberfläche natürlich wenn das Runnable lange läuft.
Lösung: Das Refresh darf nicht per asyncExec ausgeführt werden, nur die eigentliche Änderung der Oberfläche muss im UI Thread stattfinden.
Bist du dir übrigens sicher das es keine andere Lösung gibt um deine Tabelle zu aktualisieren? Polling ist in der Regel nicht sehr effizient.
 
Java:
         display.timerExec( 5000, new Runnable()
         {
            /**
             * @see java.lang.Runnable#run()
             */
            @Override
            public void run()
            {
               refreshMonitors();
               _TreeViewer.refresh();
               display.timerExec( 5000, this );
               
            }
         });

so funktioniert erstmal, aber keine Ahnung ob das nun ideal ist...
 

Zurück
Oben