[Mono-list] MedSphere Graph

Robert Jordan robertj at gmx.net
Fri Jun 13 06:04:02 EDT 2008


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 
> -----------------------------------------------------------------------------
> 



More information about the Mono-list mailing list