2009-08-26 5 views

Antwort

14

Verwenden Sie Display.asyncExec oder Display.syncExec, je nach Ihren Bedürfnissen.

Zum Beispiel könnte ein anderer Thread diese Methode aufrufen sicher ein Etikett zu aktualisieren:

private static void doUpdate(final Display display, final Label target, 
     final String value) { 
    display.asyncExec(new Runnable() { 
     @Override 
     public void run() { 
     if (!target.isDisposed()) { 
      target.setText(value); 
      target.getParent().layout(); 
     } 
     } 
    }); 
    } 
4

Es gibt ein Tutorial here.

"SWT legt Wert auf Fail-Fast, wenn es um Threading-Probleme geht, so bleiben zumindest die typischen Probleme bis zur Produktion unbemerkt. Die Frage ist jedoch, was Sie tun, wenn Sie müssen aktualisieren eines Etiketts/Knopf/Super-duper-Steuerung in SWT von einem Hintergrund-Thread Nun, es überraschend ähnlich ist Swing:“

// Code in background thread. 
doSomeExpensiveProcessing(); 
Display.getDefault().asyncExec(new Runnable() { 
public void run() { 
    someSwtLabel.setText("Complete!"); 
} 
}); 
0

Sie können tatsächlich nur eine Nachricht an den GUI-Thread gesendet, dass eine gewisse Modifikation hat wurde geändert. Das ist sauberer, wenn Sie es aus MVC Perspektive sehen.

-1

Wenn die separaten Thread aus dem Hauptthread Erstellen des GUI-Objekt zum Pass neuer Thread und Sie können auf alle Eigenschaften dieses GUI-Objekts zugreifen.

+0

Nur weil der GUI-Thread einen Verweis auf das GUI-Objekt hat, heißt das nicht, dass er darauf zugreifen kann. Sie können GUI-Objekte nur vom ursprünglichen Thread aktualisieren. –

Verwandte Themen