Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In F#, who pumps the message queue?

Tags:

f#

In F# if I do something like let form = new Form(Text = "MyForm") and run it in FSI, the form will display and update normally, and even recieve messages. However, who is pumping the message queue? There is no Application.Run call here. I'm a little confused.

like image 782
Chuck Avatar asked Mar 14 '11 23:03

Chuck


2 Answers

As ildjarn says, F# Interactive implements its own message loop. Interestingly, the message loop is not hardcoded in F# Interactive, so you can change it. This is quite useful, because the default one is based on Windows Forms, but there are other GUI frameworks you may want to use.

To do that, you would need to implement IEventLoop interface and then assign your instance to the fsi.EventLoop property. For more information see:

  • The source code for IEventLoop interface
  • The default implementation that uses WinForms
  • A simple implementation that I wrote for Gtk#
like image 148
Tomas Petricek Avatar answered Oct 14 '22 07:10

Tomas Petricek


FSI has its own message pump for this very reason.

like image 42
ildjarn Avatar answered Oct 14 '22 08:10

ildjarn