2016-10-12 7 views
-1

Ich habe eine Funktion (in einer Schleife) wird die Echtzeit-Temperatur (Serie ["Experiment"]), und ich habe auch eine theoretische Daten (Serie ["Theory"]) wollen auf der gleichen Figur geplottet werden. Theoretischer Plot muss jedoch die gleiche Startzeit mit dem Experiment haben, also muss ich den initial_time definieren, sollte es der Wert sein von (date.Hour * 3600 + date.Minute * 60 + date.Second) in die erste Schleife, und im Programm festgelegt werden. Wie extrahiert man diese initial_time? Wenn es in einem C-Programm ist, werde ich ein static int verwenden initial_time = date.Hour * 3600 + date.Minute * 60 + date.Second, aber das ist ein C# und ich konnte nicht statisch in einer Funktion definieren ... .Wie speichert man den ersten Wert der Variablen in einer C# -Funktion (in einer Schleife)

private void BackgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 

     try 
     { 

      var date = DateTime.Now; 
      x = date.Hour * 3600 + date.Minute * 60 + date.Second; 
      this.chart1.Series["Experiment"].Points.AddXY(x, myFloat); 
      int[] theory_x = new int[] { 1, 3, 5, 7, 9 }; 
      int[] theory_y = new int[] { 100, 200, 250, 300, 400}; 
      int theory_x_new=theory_x+***initial_time***; 
      this.chart1.Series["Theory"].Points.AddXY(theory_x_new, theory_y); 

     } 
catch (Exception) 
     { 

     } 
} 
+0

was meinst du mit '[...] und im Programm festgelegt werden? Ist das 'WPF' oder' WindowsForms'? –

Antwort

2

eine bool machen einige Klassenstufe Variable wahrscheinlich außerhalb der Funktion.

private boolean loaded = false; 
    private int initial_time = 0; 

Dann in Sie Loop-Funktion:

if(!loaded){ 
     loaded = true; 

     var date = DateTime.Now; 
     initial_time = date.Hour * 3600 + date.Minute * 60 + date.Second; 
    } 

aktualisieren: Wie ColinWilliams sagt in seinem Kommentar initial_time müsste auch eine Klassenstufe variabel sein.

+0

Ich hätte die Frage des OP vielleicht falsch verstanden, aber ich denke, dass sie das errechnete Datum speichern müssten. Es gilt dasselbe Prinzip, aber es müsste auch eine Variable auf Klassenebene für das Datum verwendet werden. –

+0

@ColinWilliams wahrscheinlich 'initial_time' ist eine Variable auf Klassenebene –

+0

Ah ok, ich denke, es wäre gut, das in Ihrer Antwort zu klären, wie es in der Frage unklar ist. Ansonsten stimme voll und ganz mit deiner Antwort überein. –

2

Nun, da Sie nur festlegen möchten es das erste Mal durch die Schleife laufen denke ich das es tun:

//Somewhere out of your fuction: 
private int initial_time; // = 0 (default) 


if(initial_time == 0) //No value is set (0 is default for int) 
{ 
    initial_time = DateTime.Now.Hour * 3600 + DateTime.Now.Minute * 60 + DateTime.Now.Second; 
} 

So in der zweiten Iteration es nicht wieder eingestellt. Dies bedeutet, dass der Wert "konstant" ist, solange sich Ihre Klasse im Gültigkeitsbereich befindet.

+0

vielen Dank! Es klappt! Dieser ist einfach und schön! –

+0

@adamwu HINWEIS: Da Sie "Stunde, Minute, Sekunden" nur verwenden, wenn Ihr Programm länger als "12 h/24 h" läuft, können Sie nicht sagen, wann es gestartet wurde ... –

Verwandte Themen