public void Run(ScriptRunArgs args) { var fx = args.Graphics; fx.Clear(SystemColors.Control); fx.DrawString(Message, Font, Brushes.Black, 20, 20); }
private void pbRenderTarget_Paint( object sender, PaintEventArgs args ) { var nowUtc = DateTime.UtcNow; var dt = (float)(nowUtc-PreviousFrameUtc).TotalSeconds; PreviousFrameUtc = nowUtc; if ( dt<0 ) dt=0; if ( dt>1 ) dt=1; T += dt; if ( LastCompiledScript != null ) try { var w = pbRenderTarget.ClientSize.Width; var h = pbRenderTarget.ClientSize.Height; using ( var bitmap = new Bitmap(w,h) ) { using ( var fx = Graphics.FromImage(bitmap) ) { var script = LastCompiledScript; var args2 = new ScriptRunArgs(fx,new Rectangle(0,0,w,h),T,dt); Exception ex = null; var render = new Thread(()=>{ try { script.Run(args2); } catch ( Exception tex ) { ex = tex; } }); render.Start(); if (!render.Join(200)) { render.Interrupt(); render.Abort(); LastCompiledScript = new ErrorScript( Font, "Script timed out rendering" ); LastCompiledScript.Run(args2); } else if ( ex != null ) { throw ex; } } args.Graphics.DrawImage( bitmap, new Rectangle(0,0,w,h) ); } } catch ( Exception e ) { if (!CodeExceptions) { CodeExceptions = true; lvErrors.Items.Add( new ListViewItem(new[]{"Exception", "Exception running script"}) ); lvErrors.Items.Add( new ListViewItem(new[]{"Exception Type", e.GetType().FullName}) ); lvErrors.Items.Add( new ListViewItem(new[]{"Exception Message", e.Message}) ); } } }
private void pbRenderTarget_Paint(object sender, PaintEventArgs args) { var nowUtc = DateTime.UtcNow; var dt = (float)(nowUtc - PreviousFrameUtc).TotalSeconds; PreviousFrameUtc = nowUtc; if (dt < 0) { dt = 0; } if (dt > 1) { dt = 1; } T += dt; if (LastCompiledScript != null) { try { var w = pbRenderTarget.ClientSize.Width; var h = pbRenderTarget.ClientSize.Height; using (var bitmap = new Bitmap(w, h)) { using (var fx = Graphics.FromImage(bitmap)) { var script = LastCompiledScript; var args2 = new ScriptRunArgs(fx, new Rectangle(0, 0, w, h), T, dt); Exception ex = null; var render = new Thread(() => { try { script.Run(args2); } catch (Exception tex) { ex = tex; } }); render.Start(); if (!render.Join(200)) { render.Interrupt(); render.Abort(); LastCompiledScript = new ErrorScript(Font, "Script timed out rendering"); LastCompiledScript.Run(args2); } else if (ex != null) { throw ex; } } args.Graphics.DrawImage(bitmap, new Rectangle(0, 0, w, h)); } } catch (Exception e) { if (!CodeExceptions) { CodeExceptions = true; lvErrors.Items.Add(new ListViewItem(new[] { "Exception", "Exception running script" })); lvErrors.Items.Add(new ListViewItem(new[] { "Exception Type", e.GetType().FullName })); lvErrors.Items.Add(new ListViewItem(new[] { "Exception Message", e.Message })); } } } }
public void Run( ScriptRunArgs args ) { var fx = args.Graphics; fx.Clear( SystemColors.Control ); fx.DrawString( Message, Font, Brushes.Black, 20, 20 ); }