On Thursday, 26 July 2012 at 09:46:26 UTC, Gor Gyolchanyan wrote:
So the good way to do this will be to have a single thread,
which pumps
messages and distributes the appropriate message handlers to
worker
threads, right?
My goal here is to have 100% working and responsive GUI no
matter how bad
the application lags. If, for instance, The user would push a
button, which
initiates a very expensive computation, I don't want the GUI to
become
stuck. If the user doesn't wait and pushes the button again, it
should
display a message, which says "The operation is already in
progress" or
something like that.
Are you sure you can create a complex window fast enough when
every operation is asynchronous? I usually find applications
built with complex ui frameworks start slow. Isn't it because it
takes long to create a window going through all the framework
infrastructure?
About separation of ui logic and business logic I suggest to look
at MVVM pattern (or PresentationModel according to Fowler's
terminology). Well, it doesn't allow ad-hoc code and implies
extensive design work for every View, but by ensuring that the
ViewModel contains only plain data, you're guaranteed that
business logic is separated from ui logic.