//UI thread
        /// <summary>
        /// Constructor
        /// </summary>
        public MySimulationHandler(MySimulation simulation)
        {
            State = SimulationState.STOPPED;
            ReportInterval = 20;
            SleepInterval = 0;
            m_speedMeasureInterval = 2000;
            AutosaveInterval = 10000;

            Simulation = simulation;

            m_worker = new BackgroundWorker
            {
                WorkerReportsProgress = true,
                WorkerSupportsCancellation = true
            };

            m_worker.DoWork += m_worker_DoWork;
            m_worker.RunWorkerCompleted += m_worker_RunWorkerCompleted;
        }
        public MyProjectRunner(MyLogLevel level = MyLogLevel.DEBUG)
        {
            MySimulation simulation = TypeMap.GetInstance <MySimulation>();

            SimulationHandler = new MySimulationHandler(simulation);
            m_resultIdCounter = 0;

            SimulationHandler.ProgressChanged += SimulationHandler_ProgressChanged;
            SimulationHandler.StepPerformed   += SimulationHandler_StepPerformed;

            m_monitors = new List <Tuple <int, uint, MonitorFunc> >();
            m_results  = new Hashtable();

            Project = new MyProject();

            var path = MyResources.GetEntryAssemblyPath();

            if (MyConfiguration.ModulesSearchPath.Count == 0)
            {
                MyConfiguration.SetupModuleSearchPath();
            }
            MyConfiguration.ProcessCommandParams();

            try
            {
                if (MyConfiguration.Modules.Count == 0)
                {
                    MyConfiguration.LoadModules();
                }
            }
            catch (Exception e)
            {
                MyLog.WARNING.WriteLine(e.Message);
                throw;
            }

            MyLog.Level = level;
        }
        //UI thread
        /// <summary>
        /// Constructor
        /// </summary>
        public MySimulationHandler(MySimulation simulation)
        {
            State                          = SimulationState.STOPPED;
            SimulationSpeed                = 0;
            ReportIntervalSteps            = 100;
            ReportInterval                 = 20;
            SleepInterval                  = 0;
            m_speedMeasureIntervalMillisec = 998;  // Almost 1 second (to prevent some races).
            AutosaveInterval               = 10000;

            Simulation = simulation;

            m_workedCompleted = new ManualResetEvent(true);

            m_worker = new BackgroundWorker
            {
                WorkerReportsProgress      = true,
                WorkerSupportsCancellation = true
            };

            m_worker.DoWork             += m_worker_DoWork;
            m_worker.RunWorkerCompleted += m_worker_RunWorkerCompleted;
        }
 public void OnModelChanged(object sender, MySimulation.ModelChangedEventArgs args)
 {
     if (args.Node == Target)
         ReloadContent();
 }