After controls created the async UI task executed where a long init operation can be performed. UI already created and shown when Runnable starts therefore wizard appears immediately and user can see initialization progress:
public void createControl(Composite parent) {
// create controls
getContainer().getShell().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
try {
getContainer().run(false, false, new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor arg0) throws InvocationTargetException, InterruptedException {
// init and validate controls here
}
});
} catch (InvocationTargetException e) {
// handle e.getCause();
} catch (InterruptedException e) {
// nothing
}
}
});
}