code: public void dispose() {
          if(!isDisposed) {
              new Task<Void>() {
                  public Void call() {
                      dispose0();
                      return null;
                  }
              }.execute(thread); // Issue 39 fixed.
          }
      }
docs: Disposes the native part of this Wrapper. That is, calling Release on the interface pointer. After a wrapper is disposed,
  every call to a COM method will raise an {@link IllegalStateException}