Panoramix wrote: > I have replaced the Timer object with a Gtk.Timeout and now everything seems > to work. > Why? :confused:
Because System.Timers.Timer is thread based. See http://www.mono-project.com/Responsive_Applications Robert > > > > Panoramix wrote: >> I'm trying to create a dynamic trend but, having certainly made some >> mistakes, the application crashes after a few cycles. >> Carryover below the code, where I made the mistake? >> >> Thanks to all . >> >> using System; >> using Gtk; >> using Medsphere.Widgets; >> using System.Timers; >> >> public partial class MainWindow: Gtk.Window >> { >> // creo l'oggetto grafico >> public Graph NuovoGraph = new Medsphere.Widgets.Graph2D(); >> // creo una struttura tree per immagazzinare i dati >> public TreeStore store = new TreeStore (typeof (double), typeof >> (double)); >> public TreeStore storeA = new TreeStore (typeof (double), typeof >> (double)); >> public double x=0.0; >> public double y=0.0; >> // dichiaro il timer >> private static System.Timers.Timer ourTimer; >> >> public MainWindow (): base (Gtk.WindowType.Toplevel) >> { >> Build (); >> store.AppendValues(0.0,0.0); >> storeA.AppendValues(0.1,0.0); >> >> >> // aggiungo gli assi al grafico >> NuovoGraph.AppendAxis (new LinearAxis (0, AxisLocation.Bottom)); >> NuovoGraph.AppendAxis(new LinearAxis (1, AxisLocation.Left)); >> // creo il line plot per disegnare il grafico >> LinePlot plot = new >> LinePlot(store,PlotColor.DarkBrown,PointShape.Diamond); >> LinePlot plotA = new >> LinePlot(storeA,PlotColor.Green,PointShape.Diamond); >> >> plot.Name = "plot"; >> plot.SetValueDataColumn (0, 0); >> plot.SetValueDataColumn (1, 1); >> >> plotA.Name = "plot"; >> plotA.SetValueDataColumn (0, 0); >> plotA.SetValueDataColumn (1, 1); >> >> // creo un plot range ovvero le bande colorate di range >> >> ReferenceRangePlot Rng = new ReferenceRangePlot (118.0,150.0, >> 1,PlotColor.Brown); >> // aggiungo al grafico i tracciati creati >> NuovoGraph.AddPlot(plot,NuovoGraph.Axes); >> NuovoGraph.AddPlot(plotA,NuovoGraph.Axes); >> NuovoGraph.AddPlot(Rng,NuovoGraph.Axes); >> this.hbox2.Add(NuovoGraph); >> NuovoGraph.Visible=true; >> NuovoGraph.CanFocus = false; >> //creo il timer >> ourTimer = new System.Timers.Timer(); >> // attacco l'evento al timer >> ourTimer.Elapsed += new ElapsedEventHandler(OnTimerElapsed); >> // imposto l'intervallo a 5 secondi >> ourTimer.Interval = 1000; >> } >> >> protected void OnDeleteEvent (object sender, DeleteEventArgs a) >> { >> Application.Quit (); >> a.RetVal = true; >> } >> >> protected virtual void StartT (object sender, System.EventArgs e) >> { >> if (ourTimer.Enabled == false) >> { >> ourTimer.Enabled = true ; >> button1.Label ="Started"; >> } >> else >> { >> ourTimer.Enabled = false ; >> button1.Label = "Stopped"; >> } >> >> } >> private void OnTimerElapsed(object sender, ElapsedEventArgs e) >> { >> Console.WriteLine("-> on plot in"); >> y=y + 0.2; >> store.AppendValues(y,(Math.Sin (y)+1)*75); >> LinePlot plot = new >> LinePlot(store,PlotColor.Green,PointShape.Diamond); >> NuovoGraph.RemovePlot(plot); >> NuovoGraph.AddPlot(plot,NuovoGraph.Axes); >> Console.WriteLine("-> on plot out"); >> Console.WriteLine("-> on plotA in"); >> x=x + 0.2; >> storeA.AppendValues(x+0.5,(Math.Sin (x)+1)*75); >> LinePlot plotA = new >> LinePlot(store,PlotColor.DarkBrown,PointShape.Diamond); >> NuovoGraph.RemovePlot(plotA); >> NuovoGraph.AddPlot(plotA,NuovoGraph.Axes); >> Console.WriteLine("-> on plotA out"); >> } >> >> >> } >> > > > ----- > :working: > ----------------------------------------------------------------------------- > http://freeflow.awardspace.com http://freeflow.awardspace.com > ----------------------------------------------------------------------------- > _______________________________________________ Mono-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-list
