[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