Difference between revisions of "FAQ What are IWorkspaceRunnable, IRunnableWithProgress, and WorkspaceModifyOperation?"

From Eclipsepedia

Jump to: navigation, search
 
m
 
Line 1: Line 1:
<tt>IWorkspaceRunnable</tt> is a mechanism for batching a set of changes to the  
+
<tt>IWorkspaceRunnable</tt> 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. <tt>IRunnableWithProgress</tt> 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.
workspace so that change notification and autobuild are deferred until the entire
+
batch completes. <tt>IRunnableWithProgress</tt> 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
+
<tt>WorkspaceModifyOperation</tt>.  This class rolls the two mechanisms
+
together by implementing <tt>IRunnableWithProgress</tt>
+
and performing the work within a nested <tt>IWorkspaceRunnable</tt>.
+
To use it, simply create a subclass that implements the abstract method
+
<tt>execute</tt>, and pass an instance of this subclass to
+
<tt>IRunnableContext.run</tt> to perform the work.  If you already have an
+
instance of <tt>IRunnableWithProgress</tt> on hand, it can be passed to
+
the constructor of the special subclass <tt>WorkspaceModifyDelegatingOperation</tt>
+
to create a new <tt>IRunnableWithProgress</tt> that performs workspace
+
batching for you.
+
  
 +
The solution is to use <tt>WorkspaceModifyOperation</tt>.  This class rolls the two mechanisms together by implementing <tt>IRunnableWithProgress</tt> and performing the work within a nested <tt>IWorkspaceRunnable</tt>. To use it, simply create a subclass that implements the abstract method <tt>execute</tt>, and pass an instance of this subclass to <tt>IRunnableContext.run</tt> to perform the work.  If you already have an instance of <tt>IRunnableWithProgress</tt> on hand, it can be passed to the constructor of the special subclass <tt>WorkspaceModifyDelegatingOperation</tt> to create a new <tt>IRunnableWithProgress</tt> that performs workspace batching for you.
  
 
== See Also: ==
 
== See Also: ==
 +
*[[FAQ Actions, commands, operations, jobs: What does it all mean?]]
 +
*[[FAQ How do I prevent builds between multiple changes to the workspace?]]
  
[[FAQ_Actions%2C_commands%2C_operations%2C_jobs%3A_What_does_it_all_mean%3F]]
+
{{Template:FAQ Tagline}}
 
+
[[FAQ_How_do_I_prevent_builds_between_multiple_changes_to_the_workspace%3F]]
+
 
+
<hr><font size=-2>This FAQ was originally published in [http://www.eclipsefaq.org Official Eclipse 3.0 FAQs]. Copyright 2004, Pearson Education, Inc. All rights reserved. This text is made available here under the terms of the [http://www.eclipse.org/legal/epl-v10.html Eclipse Public License v1.0].</font>
+

Latest revision as of 19:58, 29 May 2006

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.

[edit] See Also:


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.