Sto lavorando a un progetto plugin in cui sto utilizzando l'elaborazione in background di Eclipse.
Qual è la differenza tra i metodi syncExec() e asyncExec() della classe Display? In quali situazioni sono applicabili? Qualsiasi esempio potrebbe essere utile.Differenza tra syncExec() e asyncExec() della classe Display
risposta
da Q: Why do I get the error "org.eclipse.swt.SWTException: Invalid thread access"?
Per consentire thread in background per eseguire operazioni sugli oggetti appartenenti alla UI-filo, vengono utilizzati i metodi syncExec (Runnable eseguibile) e asyncExec (Runnable eseguibile) di visualizzazione. Questi sono gli unici metodi in SWT che possono essere chiamati da qualsiasi thread. Consentono a un runnable di essere eseguito dal thread dell'interfaccia utente, in modo sincrono, facendo in modo che il thread in background attenda il completamento del runnable o in modo asincrono consentendo al thread in background di continuare l'esecuzione senza attendere il risultato. Una eseguibile eseguita utilizzando syncExec() corrisponde più strettamente alla chiamata diretta equivalente all'operazione dell'interfaccia utente poiché una chiamata al metodo Java attende sempre il risultato prima di procedere, proprio come syncExec().
aggiunta alla risposta di Tom Seidel, qui ci sono esempi di situazioni in cui si potrebbe desiderare di utilizzare uno o l'altro:
Usa
asyncExec
quando si desidera aggiornare qualcosa nell'interfaccia utente, senza preoccuparsi della risultati. Ad esempio aggiornando un'etichetta o una barra di avanzamento.Utilizzare
syncExec
dove il codice che segue tale chiamata di metodo deve essere sicuro che l'interfaccia utente sia in uno stato coerente o che abbia bisogno di alcuni dati dall'interfaccia utente. Ad esempio ottenere alcuni dati da una finestra di dialogo utente. Oppure aggiorni un widget e prima di fare qualsiasi altra cosa (ad esempio un altro aggiornamento dell'interfaccia utente), vuoi sapere che l'aggiornamento del widget è stato completato.
SWT implementa il modello di interfaccia utente a singolo thread. In questo modello, solo il thread dell'interfaccia utente può richiamare le operazioni dell'interfaccia utente. Se provi ad accedere a un oggetto SWT dall'esterno del thread dell'interfaccia utente, ottieni l'eccezione "org.eclipse.swt.SWTException: accesso al thread non valido". Pertanto, per consentire ad altri thread di eseguire operazioni su oggetti appartenenti al thread dell'interfaccia utente, SWT fornisce i metodi syncExec e asyncExec.
Questo link può essere d'aiuto con un esempio
- 1. SWT Java: wrapping syncExec e asyncExec per ripulire il codice
- 2. Differenza tra display: inline-flex e display: flex
- 3. Differenza tra nessuna visualizzazione e blocco display
- 4. Differenza tra classe genitore e super classe
- 5. Differenza tra caricare una classe e istanziarla
- 6. differenza tra: [ScaffoldColumn (false)] e [Display (AutoGenerateField = false)]
- 7. Qual è la differenza tra overflow: hidden e display: none
- 8. Differenza tra DIV e SPAN con display: blocco
- 9. Problema SWT con syncExec()
- 10. differenza tra "classe A; classe B" e "classe A :: B"
- 11. Differenza tra Private Sub, Funzione e Classe
- 12. C'è qualche differenza tra tipo e classe?
- 13. Differenza tra classe astratta e Trait
- 14. Differenza tra classe caso e oggetto caso?
- 15. Display retina VS normale differenza colori display
- 16. OOP Differenza tra una classe derivata e una classe ereditata?
- 17. Esempio della differenza tra List.fold e List.foldBack
- 18. Quali sono le differenze tra display: box e display: flexbox
- 19. Differenza tra l'inizializzazione della variabile di classe finale
- 20. differenza tra system.out e system.err
- 21. Differenza tra tipo e classe in fortran 2003
- 22. differenza tra toggleclass e addclass
- 23. Differenza tra KeyEventArgs.systemKey e KeyEventArgs.Key
- 24. Differenza tra frame della vista e limite della vista + iPhone
- 25. Differenza tra l'aggiornamento della pagina e il postback della pagina
- 26. Differenza tra NonSerialized e Xml.Serialization.XmlIgnore?
- 27. Proprietà CSS: Display e visibilità
- 28. Differenza tra classe di dimensioni Compatta e Normale
- 29. Differenza tra nuovo e ignorare
- 30. Differenza tra leftAnchor e leadingAnchor?