Beispiel #1
0
        /// <summary>
        /// Ilmoittaa että scripti tulisi kääntää uusiksi.
        /// </summary>
        public void Notify(ScriptEngine scriptEngine)
        {
            // Kääntää scriptin rinnakkain.
            if (IsParallel)
            {
                ParallelScriptBuilder myParallelBuilder     = ScriptBuilder as ParallelScriptBuilder;
                ParallelScriptBuilder parallelScriptBuilder = new ParallelScriptBuilder(
                    myParallelBuilder.ScriptName,
                    myParallelBuilder.ClassName,
                    myParallelBuilder.ScriptArguments,
                    myParallelBuilder.DepencyObject,
                    (script, builder) =>
                {
                    // Kutsutaan alkuperäisen builderin callback jos sellainen on
                    // ja samalla otetaan uusi scripti kiinni lopussa.
                    if (myParallelBuilder.ScriptResolvedCallback != null)
                    {
                        myParallelBuilder.ScriptResolvedCallback(script, builder);
                    }

                    this.script = (T)script;
                });
            }
            else
            {
                // Kääntää scriptin blokkaavasti.
                script = scriptEngine.GetScript <T>(ScriptBuilder);
            }
        }
 // Ottaa resolvatun scriptin sisään ja scriptbuilderin jota käytettiin resolvauksessa.
 // Suorittaa scriptin callback metodin.
 private void ExecuteCallback(ParallelScriptBuilder parallelScriptBuilder, IScript script)
 {
     if (parallelScriptBuilder.ScriptResolvedCallback != null)
     {
         parallelScriptBuilder.ScriptResolvedCallback(script, parallelScriptBuilder);
     }
 }
        public void BeginResolve <T>(ParallelScriptBuilder scriptBuilder) where T : IScript
        {
            ParallelResolverDelegate <T> resolverDelegate = StartResolving <T>;

            ParallelWorkItem <T> parallelScriptWorker = new ParallelWorkItem <T>()
            {
                ParallelScriptBuilder   = scriptBuilder,
                ParallelResolveDelegate = resolverDelegate,
                AsyncResult             = resolverDelegate.BeginInvoke(scriptBuilder, null, null)
            };

            pendingResolves.Add(parallelScriptWorker);
        }
Beispiel #4
0
 /// <summary>
 /// Yrittää luoda halutun scriptin annetuilla tiedoilla ja luo siitä instanssin.
 /// Tätä resolvausta varten avataan uusi säije, joten se ei ole blokkaava.
 /// Kutsu ei aiheuta viivettä.
 /// </summary>
 /// <typeparam name="T">Halutun scriptin tyyppi.</typeparam>
 /// <param name="parallelScriptBuilder">Builder joka sisältää tarvittavat tiedot scriptin luomiseen.</param>
 public void MakeScript <T>(ParallelScriptBuilder parallelScriptBuilder) where T : IScript
 {
     parallelScriptResolver.LoggingMethod = LoggingMethod;
     parallelScriptResolver.BeginResolve <T>(parallelScriptBuilder);
 }