Shell.Mode

From Xojo Documentation

Property (As Integer )
aShell.Mode = newIntegerValue
or
IntegerValue = aShell.Mode

Supported for all project types and targets.

Controls the mode in which the shell operates. The shell can be running in Synchronous, Asynchronous, or Interactive modes.

Notes

Here are descriptions of each mode.

Value Name Description
0 Synchronous (Default) The shell executes its command and returns the result in the Result property when the script has finished running. Synchronous shells block the main UI thread, even when they are in a thread themselves. For long-running shell processes, use one of the other shell modes instead.
1 Asynchronous The shell executes its command and returns data via the DataAvailable event. It does not wait for a command to finish before executing the next command. An asynchronous shell script can run in the background. You'll need to make sure the Shell instance does not go out of scope while you are waiting for operations to complete.
2 Interactive The script can display a prompt and the user can interact with the shell script while it is running. Data can be sent to a running shell session with the Write method and data is returned via the DataAvailable event. Refer the interactive shell Example included with your installation (Advanced/Shell). You'll need to make sure the Shell instance does not go out of scope while you are waiting for operations to complete.

To access the DataAvailable event handler, you can subclass Shell or use AddHandler.

Sample Code

The following terminal application allows you to submit Unix commands using the interactive mode. The interface consists of two TextFields, InputField, in which the user can enter a command, and OutputField that displays the results.

The Open event for the window initializes the shell object (declared as a property of the window).

mShell = New Shell
mShell.Mode = 2

The user can type a unix command into the TextField, InputField. When they press Return, the following code in the TextField's KeyDown event runs. The Write method sends the command to the Shell's input buffer.

If Key = Chr(13) Then
If Not mShell.IsRunning Then
mShell.Execute "sh"
End If
mShell.Write(InputField.Text)
mShell.Write(Chr(13))
InputField.Text = ""
Return True
Else
Return False
End If

A Timer calls the ReadAll method in its Action event and displays the output in OutputField:

If mShell <> Nil Then
Dim output As String = mShell.ReadAll
If output <> "" Then
OutputField.SelText = output
End If
End If