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()); } } }