public IEnumerator GenerateGCode(Action <Progress> progress, Action <string> result) { foreach (var i in GenerateGCodeFile()) { progress(i); yield return(null); } if (gcode != null) { // export gcode MemoryStream ms = new MemoryStream(); string data = ""; using (StreamWriter w = new StreamWriter(ms)) { StandardGCodeWriter writer = new StandardGCodeWriter(); foreach (var i in writer.WriteFileEnumerator(gcode, w)) { progress(i); yield return(i); } gcode = null; writer = null; yield return(null); w.Flush(); ms.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(ms)) { data = reader.ReadToEnd(); } ms.Dispose(); yield return(null); } result(data); } }