/// <summary>
        /// Setup constructor
        /// </summary>
        /// <param name="uiProvider">UI provider. If null, no error messages are shown to the user</param>
        /// <param name="view">View to control</param>
        /// <param name="model">Animation model</param>
        /// <param name="workQueue">Work queue</param>
        public WaveAnimatorController( IMessageUiProvider uiProvider, IWaveAnimatorView view, WaveAnimationParameters model, IWorkItemQueue workQueue )
        {
            Arguments.CheckNotNull( view, "view" );
            Arguments.CheckNotNull( model, "model" );
            Arguments.CheckNotNull( workQueue, "workQueue" );

            view.Model = model;
            view.GenerateAnimation += OnGenerateAnimation;

            m_View = view;
            m_WorkQueue = workQueue;
            m_Marshaller = new DelegateMarshaller( );
            m_UiProvider = uiProvider;
        }
 /// <summary>
 /// Setup constructor
 /// </summary>
 /// <param name="uiProvider">UI provider. If null, no error messages are shown to the user</param>
 /// <param name="view">View to control</param>
 /// <param name="model">Animation model</param>
 public WaveAnimatorController( IMessageUiProvider uiProvider, IWaveAnimatorView view, WaveAnimationParameters model )
     : this(uiProvider, view, model, ExtendedThreadPool.Instance)
 {
 }