Search code examples
c#user-interfacefocusreal-timezedgraph

Real-time Zedgraph does not respond


My real-time does not respond any more when I change focus from it to another program. I.e. it gets stuck.

Could you please suggest me a possible reason and/or solution for this.


Solution

  • Because your GUI thread (background) isn't beeing processed, when it looses focus, your Zedgraph isn't updated. If you move a window over the ZedGraph, it isn't replotted. Instead you will see the focused window. That's my first guess. Since I don't know your programming language and code, I will just show the principle in C#.

    A timer or a new data event calls a function RealTimeGraph. The clue is that an extra thread besides the GUI thread calls RealTimeGraph. The Systems.Timers.Timer class already does that for you. Which Timer or BackgroundWorker to use depends on your application.

    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Elapsed += new ElapsedEventHandler(RealTimeGraph)
    
    Public void RealTimeGraph(object sender, EventArgs e)
    {
      if (this.InvokeRequired)
      {
        PeriodicUpdateHandler update = new PeriodicUpdateHandler(this.RealTimeGraph);
        this.BeginInvoke(periodic_update,sender, e);
      }
      else
      {
        Update();                          // check if new data for ZedGraph is available
        ZedGraph.GraphPane.AxisChange();   // optional, if ZedGraphAxis has to be recomputed
        ZedGraph.control.Invalidate();     // optional
        ZedGraph.control.Refresh();        // now the update is visible
      }
    }
    

    Additionaly it might be handy to call RealTimeGraph, if you focus your application again. Just add a new focus event handler.

     this.Enter += new System.EventHandler(this.RealTimeGraph);
    

    I hoped to show you the advantages of this concept.