Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
FAQ What are IWorkspaceRunnable, IRunnableWithProgress, and WorkspaceModifyOperation?
IWorkspaceRunnable is a mechanism for batching a set of changes to the workspace so that change notification and autobuild are deferred until the entire batch completes. IRunnableWithProgress is a mechanism for batching a set of changes to be run outside the UI thread. You often need to do both of these at once: Make multiple changes to the workspace outside the UI thread. Wrapping one of these mechanisms inside the other would do the trick, but the resulting code is cumbersome, and it is awkward to communicate arguments, results, and exceptions between the caller and the operation to be run.
The solution is to use
WorkspaceModifyOperation. This class rolls the two mechanisms
together by implementing IRunnableWithProgress
and performing the work within a nested IWorkspaceRunnable.
To use it, simply create a subclass that implements the abstract method
execute, and pass an instance of this subclass to
IRunnableContext.run to perform the work. If you already have an
instance of IRunnableWithProgress on hand, it can be passed to
the constructor of the special subclass WorkspaceModifyDelegatingOperation
to create a new IRunnableWithProgress that performs workspace
batching for you.
See Also:
FAQ_Actions,_commands,_operations,_jobs:_What_does_it_all_mean?
FAQ_How_do_I_prevent_builds_between_multiple_changes_to_the_workspace?
This FAQ was originally published in Official Eclipse 3.0 FAQs. Copyright 2004, Pearson Education, Inc. All rights reserved. This text is made available here under the terms of the Eclipse Public License v1.0.