internal void Stop()
{
main_thread.Invoke (delegate {
current_state = ProcessState.Stopping;
SuspendUserThreads (ThreadingModel.Process, null);
current_state = ProcessState.Stopped;
if (current_operation != null) {
current_operation.Completed ();
current_operation = null;
}
stopped_event.Set ();
return null;
}, null);
}