Search Results for

Show / Hide Table of Contents

# Class MainLoop

Simple main loop implementation that can be used to monitor file descriptor, run timers and idle handlers.

##### Inheritance

System.Object
MainLoop

##### Remarks

Monitoring of file descriptors is only available on Unix, there does not seem to be a way of supporting this on Windows.

###### Namespace: Terminal.Gui

###### Assembly: Terminal.Gui.dll

##### Syntax

    public class MainLoop : Object

### Constructors

#### MainLoop(IMainLoopDriver)

Creates a new Mainloop.

##### Declaration

    public MainLoop(IMainLoopDriver driver)

##### Parameters

Type | Name | Description
--- | --- | ---
IMainLoopDriver | driver | Should match the ConsoleDriver (one of the implementations UnixMainLoop, NetMainLoop or WindowsMainLoop).

### Properties

#### Driver

The current IMainLoopDriver in use.

##### Declaration

    public IMainLoopDriver Driver { get; }

##### Property Value

Type | Description
--- | ---
IMainLoopDriver | The driver.

#### IdleHandlers

Gets the list of all idle handlers.

##### Declaration

    public List<Func<bool>> IdleHandlers { get; }

##### Property Value

Type | Description
--- | ---
System.Collections.Generic.List<System.Func<System.Boolean>> |

#### Timeouts

Gets the list of all timeouts sorted by the System.TimeSpan time ticks./>. A shorter limit time can be added at the end, but it will be called before an earlier addition that has a longer limit time.

##### Declaration

    public SortedList<long, MainLoop.Timeout> Timeouts { get; }

##### Property Value

Type | Description
--- | ---
System.Collections.Generic.SortedList<System.Int64, MainLoop.Timeout> |

### Methods

#### AddIdle(Func<Boolean>)

Adds specified idle handler function to mainloop processing. The handler function will be called once per iteration of the main loop after other events have been handled.

##### Declaration

    public Func<bool> AddIdle(Func<bool> idleHandler)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Func<System.Boolean> | idleHandler | Token that can be used to remove the idle handler with RemoveIdle(Func<Boolean>) .

##### Returns

Type | Description
--- | ---
System.Func<System.Boolean> |

#### AddTimeout(TimeSpan, Func<MainLoop, Boolean>)

Adds a timeout to the mainloop.

##### Declaration

    public object AddTimeout(TimeSpan time, Func<MainLoop, bool> callback)

##### Parameters

Type | Name | Description
--- | --- | ---
System.TimeSpan | time |
System.Func<MainLoop, System.Boolean> | callback |

##### Returns

Type | Description
--- | ---
System.Object |

#### EventsPending(Boolean)

Determines whether there are pending events to be processed.

##### Declaration

    public bool EventsPending(bool wait = false)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Boolean | wait |

##### Returns

Type | Description
--- | ---
System.Boolean |

#### Invoke(Action)

Runs `action` on the thread that is processing events

##### Declaration

    public void Invoke(Action action)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Action | action | the action to be invoked on the main processing thread.

#### MainIteration()

Runs one iteration of timers and file watches

##### Declaration

    public void MainIteration()

#### RemoveIdle(Func<Boolean>)

Removes an idle handler added with AddIdle(Func<Boolean>) from processing.

##### Declaration

    public bool RemoveIdle(Func<bool> token)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Func<System.Boolean> | token | A token returned by AddIdle(Func<Boolean>)

##### Returns

Type | Description
--- | ---
System.Boolean |

#### RemoveTimeout(Object)

Removes a previously scheduled timeout

##### Declaration

    public bool RemoveTimeout(object token)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Object | token |

##### Returns

Type | Description
--- | ---
System.Boolean |

#### Run()

Runs the mainloop.

##### Declaration

    public void Run()

#### Stop()

Stops the mainloop.

##### Declaration

    public void Stop()

### Events

#### TimeoutAdded

Invoked when a new timeout is added to be used on the case if ExitRunLoopAfterFirstIteration is true,

##### Declaration

    public event Action<long> TimeoutAdded

##### Event Type

Type | Description
--- | ---
System.Action<System.Int64> |