Exemple #1
0
        private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            // Init the python engine

            ProxyStream InputStream = new ProxyStream(1000);
            ProxyStream OutputStream = new ProxyStream(1000);
            ProxyStream ErrorStream = new ProxyStream(1000);

            ScriptEngine engine = Python.CreateEngine();
            ScriptScope scope = engine.CreateScope();

            StreamReader OutputReader = new StreamReader(OutputStream);
            StreamWriter InputWriter = new StreamWriter(InputStream);

            engine.Runtime.IO.SetInput(InputStream, Encoding.ASCII);
            engine.Runtime.IO.SetOutput(OutputStream, Encoding.ASCII);
            engine.Runtime.IO.SetErrorOutput(ErrorStream, Encoding.ASCII);

            scope.SetVariable("Axis1", AXISID.AXIS1);
            scope.SetVariable("Axis2", AXISID.AXIS2);
            scope.SetVariable("Controller", DynamicHelpers.GetPythonTypeFromType(typeof(Controller)));

            while (true)
            {
                if (Locked)
                {
                    OutputStream.clean();
                    try
                    {
                        backgroundWorker1.ReportProgress(2, mShellCommands);
                        var code = engine.CreateScriptSourceFromString(mShellCommands);
                        code.Execute(scope);
                    }
                    catch (Exception ee)
                    {
                        backgroundWorker1.ReportProgress(1, ee.ToString());
                        //textBox2.AppendText(string.Format("{0}{1}", Environment.NewLine, ee));
                    }


                    Locked = false;

                    OutputStream.Position = 0;
                    backgroundWorker1.ReportProgress(0, OutputReader.ReadToEnd());
                }
            }
        }