Druckfortschritt mit TimeSpan berechnen

dyson.

Lieutenant
Registriert
März 2012
Beiträge
619
Hallo,
ich habe mir in C# Windows Forms ein kleines Programm geschrieben um den Druckstatus eines 3D Druckers zu überwachen.
Die Start und Endzeit des Druckes konnte ich per Post-Befehl vom Drucker abfragen und habe diese als DateTime als var t1 und var t2 abgespeichert.
Nun würde ich gern mit Hilfe der beiden Zeiten und der aktuellen Systemzeit den Druckfortschritt in Prozent berechnen. Ich hoffe ihr könnt mir da folgen.
Nun bin ich leider ein C# n00b und weiß leider nicht wie ich ein solches Vorhaben genau umsetze.

Code:
private void timer1_Tick(object sender, EventArgs e)
        {
            var request = (HttpWebRequest)WebRequest.Create("http://172.16.6.174/printer.cgi");

            var postData = "cmd=exec&addr=0x80001020&offset=0&limit=1&list=1&.";
            //postData += "&addr=0x80001020";
            //postData += "offset=0";
            //postData += "limit=1";
            //postData += "list=1";
            //postData += ".=";
            var data = Encoding.UTF8.GetBytes(postData);

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            var responseString = "";
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                responseString = new System.IO.StreamReader(response.GetResponseStream()).ReadToEnd();
            }

            try
            {
                var responseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponseData>(responseString);
                if (responseData != null && responseData.result != null && responseData.result.data != null && responseData.result.data.Length > 0)
                {
                    label1.Text = "Druckname" + $"{responseData.result.data[0].ProcessName}";
                    label1.Text += " Startzeit " + $"{responseData.result.data[0].StartTime}";
                    label1.Text += " Endzeit " + $"{responseData.result.data[0].EndTime}";

                    var t1 = DateTime.Parse(responseData.result.data[0].StartTime);
                    var t2 = DateTime.Parse(responseData.result.data[0].EndTime);

                    var diff = t2 - t1;
                    label1.Text += " Zeit in Minuten " + $"{diff.TotalMinutes} minuten\r\n";



                }
            }
            catch (Exception ex)
            {

                label1.Text = " Fehler bei Parsen des Models";
            }

Das Einlesen per Json hat ein Bekannter für mich gemacht, der ist leider aktuell nicht erreichbar. Deshalb frage ich euch.:freak:


Edit:

Code:
//Prozentfortschritt berechnen
                    var sys = DateTime.Now;
                    var diff2 = Convert.ToInt32(t2) - Convert.ToInt32(sys);
                    var test = 100 / Convert.ToInt32(diff.TotalMinutes);
                    var testI = Convert.ToInt32(test) * Convert.ToInt32(diff2);

Hab es nun so versucht. Dort läuft das Programm allerdings in die Exception.
 
Zuletzt bearbeitet:
Ich würde es mit folgendem probieren:
Code:
var totalSeconds = (t2 -  t1).TotalSeconds;
var secondsSinceStart = (Datetime.Now - t1).TotalSeconds;
var percentage = secondsSinceStart / totalSeconds * 100;

Habs nicht direkt ausprobiert. Methoden / Eigenschaften könnten etwas anders heißen.
 
Vielen Dank, hab es schon hinbekommen.

Code:
                    var t1 = DateTime.Parse(responseData.result.data[0].StartTime);
                    var t2 = DateTime.Parse(responseData.result.data[0].EndTime);

                    var diff = t2 - t1;
                    label1.Text += " Druckzeit: " + $"{diff.TotalMinutes} minuten\r\n";

                    //Prozentfortschritt berechnen
                    var sys = DateTime.Now;
                    var diff2 = t2 - sys;
                    var test = 100 / Convert.ToDouble(diff.TotalMinutes);
                    var diff3 = diff - diff2;
                    var testI = Convert.ToDouble(test) * Convert.ToDouble(diff3.TotalMinutes);

                    if (Convert.ToInt32(testI) < 0)
                    {
                        label1.Text += " Druck abgeschlossen!";
                    }
                    else
                    {
                        label1.Text += "Fortschritt: " + Convert.ToDouble(testI) + " %";
                    }

Weiß jemand zufällig wie man im axvlcplugin21 ein Aufnahmegerät öffnet?
Also das Öffnen eines Streams habe ich hinbekommen. Jedoch möchte ich einfach eine Kamera als Aufnahmegerät öffnen.
 
Zurück
Oben