Exemplo n.º 1
0
        /// <summary>
        /// Callback will be called for each SF...
        /// </summary>
        /// <param name="fullPaths"></param>
        /// <param name="callback"></param>
        public void LoadSFs(List <string> fullPaths, Action <string, ScriptFile> callback)
        {
            List <ScriptFile> filesForReading = new List <ScriptFile>(fullPaths.Count);

            foreach (string fullPath in fullPaths)
            {
                if (currentSFFiles.Contains(fullPath.ToLowerInvariant()))
                {
                    continue;
                }

                ScriptFile sf = scriptManager.GetSFFromFullPath(fullPath);
                if (sf != null && (sf.SC == null || sf.ReadingState < ReadingState.CheckCode || sf.IsSourceFileUpdated()))
                {
                    filesForReading.Add(sf);
                    currentSFFiles.Add(fullPath.ToLowerInvariant());
                    //Main.Trace.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "PrePreparing for saving SF " + fullPath);
                }
            }

            filesForReading.TrimExcess();

            //foreach (ScriptFile sf in filesForReading)
            //Main.Trace.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "PrePrePreparing for saving SF " + sf.SFFullPath);

            LoadSFsData data = new LoadSFsData(filesForReading, callback);
            Thread      t    = new Thread(DoLoadSFs);

            t.IsBackground = true;
            t.Name         = "Loading SFs thread";
            t.Start(data);
        }
Exemplo n.º 2
0
        private void DoLoadSFs(object data)
        {
            LoadSFsData loadSFsData = (LoadSFsData)data;

            while (!_isSMLoaded)
            {
                Thread.Sleep(50);
            }

            Main.Trace.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "DoLoadSFs(object data) 0, thread " + Thread.CurrentThread.Name + Thread.CurrentThread.GetHashCode());
            Main.Trace.Flush();

            //foreach (ScriptFile sf in loadSFsData.SFs)
            //Main.Trace.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "PrePrePrePreparing for saving SF " + sf.SFFullPath);

            try
            {
                scriptManager.ReadAssemblySFs(ReadingState.ScriptCode, loadSFsData.SFs);

                //foreach (ScriptFile sf in loadSFsData.SFs)
                //Main.Trace.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "PrePrePrePrePreparing for saving SF " + sf.SFFullPath);

                scriptManager.ReadAssemblySFs(ReadingState.CheckCode, loadSFsData.SFs);

                //foreach (ScriptFile sf in loadSFsData.SFs)
                //Main.Trace.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "PrePrePrePrePrePreparing for saving SF " + sf.SFFullPath);
            }
            catch (ThreadAbortException)
            { }
            catch (Exception e)
            {
                Main.NotifyError(e);
            }

            Main.Trace.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "DoLoadSFs(object data) 1, thread " + Thread.CurrentThread.Name + Thread.CurrentThread.GetHashCode());
            Main.Trace.Flush();

            foreach (ScriptFile sf in loadSFsData.SFs)
            {
                Main.Trace.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 0, "After saving SF " + sf.SFFullPath);

                if (currentSFFiles.Contains(sf.SFFullPath.ToLowerInvariant()))
                {
                    currentSFFiles.Remove(sf.SFFullPath.ToLowerInvariant());
                }

                _currentUpdatedFiles.Add(sf);
            }

            foreach (ScriptFile sf in loadSFsData.SFs)
            {
                _dispatcher.Invoke(loadSFsData.Callback, sf.SFFullPath, sf); // have to be on the end
            }
        }