Zum Inhalt springen

Tician

Mitglieder
  • Gesamte Inhalte

    541
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    9

Beiträge von Tician

  1. public List<string>[,] GetList()
            {
                return liste;
            }

    mit entsprechendem Aufruf

                    List<string>[,] liste = datei.GetList();

    Doch etwas gefunden das ich verstehe^^ Schauen wir mal ob es später funktioniert :)

    Thema kann offen bleiben ich bin mir sicher das ich noch ein paar mal gegen die Wand rennen werde sobald ich das Programm mal starte.

  2. Moin,

    Wie versprochen versuche ich mich and er OOP um mir den Spaghetti-Code abzugewöhnen. Tötet mich nicht das ist mein erstes Mal und die Chancen bestehen das ich weit am Ziel vorbei geschossen bin. Folgenden Code mit 2 Klassen habe ich:

    class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    string sourcePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\blabla";
                    string searchPattern = "*.csv";
                    int spalte = 7;
    
                    //lesen
                    DateiEinlesen datei = new DateiEinlesen(sourcePath, searchPattern, spalte);
                    Console.WriteLine("Dateien eingelesen");
                }
                catch
                {
    
                }
            }
        }
    
    
    class DateiEinlesen
        {
            string sourcePath;
            string searchPattern;
            int spalte;
            public DateiEinlesen(string sourcePath, string searchPattern, int spalte)
            {
                try
                {
                    this.sourcePath = sourcePath;
                    this.searchPattern = searchPattern;
                    this.spalte = spalte;
    
                    string currentLine;
                    string[] fileArray = Directory.GetFiles(sourcePath, searchPattern);
                    string[] lineData;
                    int sourcearrayLength = fileArray.Length;
                    Console.WriteLine(sourcearrayLength + " Dateien gefunden!");
                    List<string>[,] liste = new List<string>[sourcearrayLength,2]; //liste für jede Datei[NummerDerDatei,Zeilen[1]/AusgewählteSpalte[2]]
    
                    if (sourcearrayLength == 0)
                    {
                        Environment.Exit(0);
                    }
    
                    for (int x = 1; x <= sourcearrayLength; x++) //jede Datei
                    {
                        using (StreamReader sr = new StreamReader(sourcePath))
                        {
                            liste[x - 1, 0].Add(sr.ReadLine());
    
                            while ((currentLine = sr.ReadLine()) != null)
                            {
                                liste[x - 1, 0].Add(currentLine);
                                lineData = currentLine.Split(';');
                                liste[x - 1, 1].Add(lineData[spalte - 1]);
                            }
                            sr.Close();
                        }
                    }                
                }
                catch (Exception ex) 
                {
                    //sr.Close(); //Sichtbarkeit?!
                    Console.WriteLine(ex);
                }            
            }
        }

    Das Programm soll csv-Dateien in einem Ordner einlesen. Pro Datei soll es jeweils 2 Listen geben, eine mit den ganzen zeilen und eine nur mit einer bestimmten Spalte jeder Zeile.

    1. Problem: Ich weiß wie ich über den Konstruktor Variablen von meiner Main-Klasse in die andere Klasse zum benutzen weitergeben kann. Ich hab absolut null Ahnung oder Erfahrung wie ich meine 2-dimensionale Liste zurück an meine Main-Klasse geben kann um sie dort für weitere Zwecke zu benutzen (später an eine weitere Klasse zu übergeben).

    Ich habe versucht mich zu belesen, aber ich versteh das get/set Zeug ums verrecken nicht.

    2. Problem: der StreamReader sollte (wenn ich das richtig verstanden habe) auch bei einer Exception ein Close() bekommen, das ist mir aber hier nicht so möglich wie ich es wollte. Wie machen andere das?

    Könnte mir jemand auf die Sprünge helfen?

  3. Kommentare sind im Prinzip für mich, wenn ich jetzt anfangen würde using() zu benutzen würde ich mir auch minimum dahinter schreiben "braucht kein Exception, ruft Dispose auf" weil ich mir das einfach nicht merken kann. Gib mir ne Woche oder gar einen Monat ohne Programmieren und ich erkenne das using() nicht mehr.

    Ich weiß das mein Code grauenhaft ist und du hältst es mir ja auch mit jedem neuen Thread unter die Nase, aber das nehme ich als deine Meinung hin, ich versuche das was ich kann ohne das man mir über ein Forum die Grundlagen neu beibringen muss, aber das Thema hatten wir schon. Wenn ich anfange Klassen zu machen und die einfachsten Dinge (wie die gottverdammten Zugriffsebenen!) nicht hinbekomme dann ist mir und auch anderen nicht geholfen, es raubt mehr Zeit als wenn ich einen Code poste den man (auch wenn es einem die Nägel hochziehen) verstehen kann.

    Irgendwann werde ich hoffentlich mal etwas größeres Programmieren und dann wird sich mir vielleicht auch der Sinn von Klassen eher erschließen als bei meinen kleinen Programmen hier.

     

  4. vor 5 Stunden schrieb Tician:

    catch (Exception ex)

    {

    Console.WriteLine(ex);

    Console.WriteLine("Programm wird beendet, bitte beliebige Taste druecken...");

    sw.Close();

    sr.Close();

    Console.ReadKey();

    }

    Auch wenn das jetzt alles wieder sehr Lehrreich war würde ich fast behaupten wenn ich jetzt das hier mache:

    catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    Console.WriteLine("Programm wird beendet, bitte beliebige Taste druecken...");
                    sw.Close();
                    sr.Close();
    				sw.Dispose();
                    Console.ReadKey();
                }                     

    Das sich das Programm trotzdem an der unbehandelten Ausnahme bei sw.Close() aufhängt weil er das schon gar nicht mehr machen kann. Wenn ich das jetzt aber umdrehe und sw.Dispose() zuerst aufrufe denke ich gibt es auch Probleme (ich sollte ja keine Ressourcen freigeben wenn der StreamWriter noch nicht geschlossen wurde).

    Wenn ich jetzt also doch ein using() benutze... wann genau wird das Dispose aufgerufen? Direkt am Anfang der Exception oder am Ende? Keine Ahnung wie lange ich heute noch bleibe das ist alles Spekulation basierend auf meinem Verständnis der Dinge, ich probier entweder später oder morgen nochmal rum.

  5. Also schaue ich mir die Klassen die ich benutze wohl besser genauer an. Ist das IDispose das einzige Anzeichen für unmanaged Code?

    Wenn ich das richtig verstehe und faul wäre müsste ich rein theoretisch in meiner Exception also statt sw.Close() einfach ein sw.Dispose() einfügen? Oder brauche ich trotzdem das sw.Close() (wir hatten in der Schule gelernt das das Erzeugen des Objektes eine Datei öffnet; mit sw.WriteLine schreiben wir in die Datei und ohne sw.Close() gibt es keine Datei oder Veränderung da mit sw.Close die Datei erst gespeichert und geschlossen wird)? Oder warum meintest du brauche ich dringend ein using? Ich behandel die csv ja wie eine normale Text-Datei und genauso wird sie auch wieder geschrieben, das Programm funktioniert ja soweit fast einwandfrei.

  6. Ah, dann hast du das wiederholt was mein Ausbilder vorgeschlagen hat: Erst alles in einer Variable sammeln und dann in einem Rutsch in die Datei.

    Wenn mein Programm so abstürzt hab ich nämlich auch eine Datei (Die .tmp die geschrieben wird) die sich dann auch nach PC Neustart nicht löschen lässt ("wird von einem Prozess verwendet"), das dauert dann etwa 20 Minuten bis dieser Zugriff weg ist.

    Ich habe jetzt oft von managed und unmanaged Code gehört und weiß auch etwa was es ist. Wie erkenne ich unmanaged Code denn, wie kommst du auf dieses IDisposable? Ich dachte unmanaged Code wäre alles was ich von einer .dll entnehme die nicht automatisch in der IDE enthalten ist (z.B. Public Declare Function BlockInput Lib "user32".... ) oder sowas, wir haben das Schreiben und Lesen aus Dateien in der Schule drangenommen aber auch nur ohne dieses "using".

    Ich habe also die Wahl entweder erst alles im Speicher zu machen oder ein using zu benutzen. Und wenn ich das richtig gelesen habe dann muss ich Dispose() aufrufen wenn ich fertig bin, aber wenn mein Code gegen die Wand rennt (also ne Exception wirft) dann wird Dispose() automatisch ausgeführt.

    https://msdn.microsoft.com/de-de/library/yh598w02.aspx

  7. So also ich kann sagen beim ersten Ausführen an jedem PC kommt dieser Fehler, danach nicht mehr. Ich hab also nachdem es 20 mal lief den PC neu gestartet und zack hatte den Fehler. Wie gesagt kann ich nicht sagen warum sich das Netzwerk so verhält, aber das Programm macht komisches, wenn ich das richtig sehe kommt der mit dem sw.Close() nicht klar und schmeißt dann noch einen unbehandelten Fehler?

     

    Unbenannt2.png

  8. Oh, ich hatte es jetzt vorübergehend auf Desktop verschoben weil es Netzwerkmäßig eben diesen Hänger hatte, das sollte eigentlich ein Netzwerkpfad sein

                    //string sourcePath = @"\\nas-xxx\blabla";
                    //string destinationPath = @"\\nas-xxx\blabla";
                    string sourcePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Ordnername";
                    string destinationPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Ordnername";

    So sieht es gerade vorübergehend im Code aus, ich hatte es vergessen zu verändern.

    Mit deinen Fragen kann ich nichts anfangen, den genauen Wortlaut der Exceptions muss ich nochmal irgendwie kreieren und hoffen das ich einen Screenshot machen kann und das "Programm funktioniert nicht mehr" blabla von Windows irgendwie wegschieben. Was sind Symbol-Dateien und Stacktrace? Ich kann also die pdb-Datei in den Ordner werfen in dem auch meine exe-Datei ist? Erzeugt das dann eine Datei?

  9. Ja, mein Programm soll aus csv-Dateien aus jeder Zeile eine bestimmte Spalte auslesen (Zahl). Diese wird an einen link gehängt, der link selbst steht fest im Code und gibt auch ohne den Zusatz der Zahl (oder sogar einer falschen Zahl) ein Ergebnis zurück. Die URL muss richtig sein, zu 99% läuft das Programm durch, selten gibt der angesprochen Server einen Fehler (500 - "Interner Serverfehler") zurück, auch das funktioniert einwadnfrei und das Programm läuft wie ich es wollte weiter.

    Der Rest stimmt nicht ganz, ich fächer meinen Code mal komplett auf, aber dadurch das es Spaghetti-Code ist bin ich einfach mittlerweile schon so deprimiert das ich mich nicht mehr traue den Code zu posten ._.

    static void Main(string[] args)
            {
                StreamReader sr = null;
                string currentLine;
                StreamWriter sw = null;
                List<string> nummerListe = new List<string>();
    
                try
                {
                    string sourcePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
                    string destinationPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
                      //doppelt da später noch geändert wird
                    string[] filearray = Directory.GetFiles(sourcePath, "*.csv");
                    int sourcearraylength = filearray.Length;
    
                    if (sourcearraylength == 0) //wenn keine Datei vorhanden dann schließ das Programm
                    {
                        Environment.Exit(0);
                    }
    
                    for (int x = 1; x <= sourcearraylength; x++) //jeder Datei
                    {
                        sr = new StreamReader(filearray[x - 1], true);
                        string dateiname = "\\inArbeit";
                        sw = new StreamWriter(destinationPath + dateiname + ".tmp");
                        WebClient wc = new WebClient();
                      
                        //Read and write header
                        string header = sr.ReadLine();
                        sw.WriteLine(header + ";Status-Text;Status");
    
                        while ((currentLine = sr.ReadLine()) != null) //jede Zeile
                        {
                            string[] singleData = currentLine.Split(';');
                            string nummer = singleData[6];
    
                            if (singleData[0] == "Anzahl:")
                            { //Datei hat noch viele leere Zeilen nach "Anzahl:", diese sollen übersprungen  werden
                                sw.WriteLine(currentLine);
                                break;
                            }
    
                            Console.WriteLine("Schaue nach Nummer: " + nummer);
    
                            if (!nummerListe.Contains(nummer))
                            {
                                //get site information
                                string url = "https://blabla" + nummer;
                                byte[] response = null;
                                try
                                {
                                    response = wc.DownloadData(url);
                                }
                                catch (WebException)
                                {
                                    Console.WriteLine("...HTTP-Error");
                                    sw.WriteLine(currentLine+";Fehler;Fehler");
                                    continue;
                                }                            
                                string webtext = Encoding.ASCII.GetString(response);
    
                                //Regex for searching
                                Regex reg = new Regex("String1", RegexOptions.Singleline);
                                Regex reg2 = new Regex("String2", RegexOptions.Singleline);
                                Regex reg3 = new Regex("String3", RegexOptions.Singleline);
                                Regex reg4 = new Regex("String4", RegexOptions.Singleline);
                                Match match = reg.Match(webtext);
                                Match match2 = reg2.Match(webtext);
                                Match match3 = reg3.Match(webtext);
                                Match match4 = reg4.Match(webtext);
    
                                if (match.Success)
                                {
    
                                    sw.WriteLine(currentLine + ";blabla;alles gut");
                                    Console.WriteLine("...gut");
                                }
                                else if (match2.Success)
                                {
                                    sw.WriteLine(currentLine + ";blabla2;gut");
                                    Console.WriteLine("...gut");
                                }
                                else if (match3.Success)
                                {
                                    sw.WriteLine(currentLine + ";blabla3;gut");
                                    Console.WriteLine("...gut");
                                }
                                else if (match4.Success)
                                {
                                    sw.WriteLine(currentLine + ";blabla4;kein Status");
                                    Console.WriteLine("...ohne Status");
                                }
    
    
                                else
                                {
                                    sw.WriteLine(currentLine + ";blabla5;ueberpruefen");
                                    Console.WriteLine("...ueberpruefen");
                                }
    
                                //add to list
                                versandnummerListe.Add(versandnummer);
                            }     
                            else
                            {
                                sw.WriteLine(currentLine + ";bereits geprueft;uebersprungen");
                                Console.WriteLine("...uebersprungen");
                            }  
                                          
                        }
                        sw.Close();
                        sr.Close();
    
                        File.Move(destinationPath + dateiname + ".tmp", destinationPath + "\\Fertig" + Path.GetFileName(filearray[x - 1]));
                    }
                    Console.WriteLine("Abgeschlossen\n\nBeliebige Taste zum Beenden des Programmes druecken...");
                    Console.ReadKey();
                }          
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    Console.WriteLine("Programm wird beendet, bitte beliebige Taste druecken...");
                    sw.Close();
                    sr.Close();
                    Console.ReadKey();
                }                     
            }

    Ich hoffe ich hab alles erwischt was nicht neutral ist.

    Wie gesagt das Programm stürzt nur ohne IDE ab und da gibt es dann keine Zeilennummer oder ähnliches, das einzige was ich gesehen habe ist das mehrmals ein "Pfad nicht vorhanden" kam, weil wie gesagt aus irgendeinem Grund beim Programmstart der Netzwerk-Ordner mal kurz neu geladen hat - zum 2. mal.

  10. OK dann hier mal anhand des Codes erklärt was ich mache:

    try
    { 
    ...
    byte[] response;
    //ließ alle Dateien in einem Ordner ein
    	for () //für jede Datei führe aus...
    	{		//Bsp: skip erste Zeile (Header)
          WebClient wc = new WebClient();
    		while ((currentLine = sr.ReadLine()) != null) //für jede Zeile...
    		{
    			if (!nummerliste.Contains(nummer) 	//wenn eine Nummer in der Datei noch nicht vorkam
    			{
                  byte[] response = null;
    				try
    				{
    				response = WebClient.DownloadData(url+nummer) //ließ die Seite aus
    				}
    				catch (WebException)
    				{
    				Console.WriteLine("HTTP-Error") //Seite gibt bei Stichzeiten einen 500-Error zurück, das ist ein Einzelfall und soll übersprungen werden
    				continue;
    				}
                  //hier noch einige if/Else if/else-Abfragen um die Informationen zu sortieren
                  nummerliste.Add(nummer)
    			}
    		}
            sw.Close();
            sr.Close();
    	}
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex);
    sw.Close();
    sr.Close();
    Console.ReadKey();
    }

    Das sollte einen groben EInblick geben was passiert, bzw was ich bezwecken möchte.

    Die Betreiber der Siete haben eine API, die aber leider schon seit Wochen in Wartung und nicht verfügbar ist weswegen ich das Programm hier überhaupt schreibe

  11. Hallöööchen mit 3 öchen

    ich habe ein Programm das Dateien einließt und auch schreibt. Das Programm läuft mit der IDE einwandfrei (liegt auf einem Netzlaufwerk) - ohne IDE stürzt es oft ab.

    Unser Netzwerk ist sehr stabil, die exe-Datei, die zu lesende Datei und die zu schreibende Datei befinden sich alle im selben Ordner und sobald ich mein Programm starte passiert es oft das der grüne (Windows 7) Ladebalken in der Pfad-Leiste des Netzwerkordners erscheint, kurz darauf schmeißt mein Programm 2 IO-Exceptions (eine davon "Netzwerkpfad nicht vorhanden") und reagiert schließlich nicht mehr (ich schätze ja das Programm selbst wird komplett in den Arbeitsspeicher geladen sonst kann er ja nicht mehr auf die exe zugreifen?).

    Abgefangen habe ich Exceptions so:

    try
    { 
    ...
    byte[] response;
    	for ()
    	{
    		while ()
    		{
    			if ()
    			{
    				try
    				{
    				response = WebClient.DownloadData(url)
    				}
    				catch (WebException)
    				{
    				Console.WriteLine("HTTP-Error")
    				continue;
    				}
    			}
    		}
    	}
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex);
    sw.Close();
    sr.Close();
    Console.ReadKey();
    }
    	

    Den WebException brauche ich extra, weil das Programm mit neuem Beginn der while-Schleife weiterlaufen muss, bei allem anderen soll es natürlich abbrechen. Ich hätte behauptet eigentlich sollte ich nur 1 Exception erhalten, aber mein Programm wirft ja 2 bevor es abstürzt. Ist das nun weil C# automatisch mehrere Threads erstellt oder rutscht es bei IO-Exceptions irgendwie doch in das kleine WebException rein oder kann ich bei Netzwerkabbruch überhaupt nichts abfangen weil das Programm ja selbst nicht erreichbar ist?

    Warum das Netzlaufwerk an erster Stelle da kurz Schluckauf hat weiß ich nicht. Für Hilfe wäre ich wie immer dankbar.

  12. vor einer Stunde schrieb Whiz-zarD:

    Sorry aber das, was ich von dir in diesem Forum gesehen habe, war keine objektorientierte Programmierung. Nur weil man eine objektorientierte Sprache verwendet, heißt es noch lange nicht, dass man auch Objektorientierung anwendet

    Exakt, wir lernen es, weswegen die Ausssage hier auch nichts zu suchen hat, das ich es nicht anwenden kann ist mein Problem :(

    Du beziehst dich nur auf FIAE'ler, aber was denkst du erwartet man programmiertechnisch von einem FISI wie mir später?

    Kein Lehrer und auch keine Schule ist perfekt, man muss sich anpassen und wenn ich etwas nicht verstehe frage ich meinen Ausbilder oder belese mich in Büchern oder über google.

  13. Also ich komme aus Baden Württemberg und bin im 2. Layer (Lehrjahr :D) und bis jetzt ist Schule eigentlich echt super.

    BWL und Wirtschaftslehre gibt es absolut nichts auszusetzen, unsere Lehrerin bringt alles verständlich und geordnet rüber und sagt uns auch vorher was Prüfungsrelevant ist und was nicht.

    SAEL ist ziemlich viel: C#, objektorientiertes Programmieren, Struktogramm, UML und gleichzeitig lernen wir die Grundlagen von Datenbanken (Access), also Begriffe, Beziehungen, ERModell

    Deutsch und GGK sind meine Hassfächer, nicht weil ich es nicht kann sondern weil ich den Lehrer nicht abkann er springt von Thema zu Thema, hat überhaupt keinen Faden den man verfolgen kann und ist ein Einwanderer der gebrochen deutsch spricht, aber zumindest in der Theorie weiß wie die Sprache funktioniert. Dementsprechend rennen wir die Themen durch und lernen halt irgendwie auswendig.

    ITS ist solala. Wir haben im ersten Lehrjahr Hardware-Grundlagen gehabt, sprich was ist in einem PC verbaut, wie pflegt man es und aus welchen Funktionsteilen besteht es. Dieses Lehrjahr haben wir mit Windows-Server angefangen, also einen aufgesetzt, AD und DHCP installiert, Benutzer angelegt und Laufwerke mit verschiedenen Rechten automatisch verbunden. Mit Linux haben wir noch gar nichts gemacht. Wir richten Cisco-Switche ein (IP, Passwörter, MOTD, VLAN,...), dabei lernen die meisten die Befehle die sie eintippen auswendig, weil ein paar Grundlagen nicht angekommen sind (z.B. wie man das '?' verwendet und das die Befehle Abkürzungen sind).

    Der Hammer dabei ist das wir zwar IPs vergeben aber noch überhaupt keine Grundlage haben, die Schüler wissen nicht was das überhaupt ist, was es mit der SNM auf sich hat oder warum plötzlich kein SGW gebraucht wird. "Weil das kommt erst in Kapitel 6 dran" und damit umgeht unser Lehrer den theoretischen Teil weil er die Frage nach dem "Warum brauchen wir das" umgehen möchte indem er erst das praktische macht. Regt mich zwar auf, aber ich persönlich komme damit klar weil ich mir alles ergoogle, wie andere das machen - keine Ahnung.

    Englisch ist halt englisch^^ Kreuz und quer mal Texte übersetzen, neue Wörter lernen, Betrieb vorstellen können. Irgendwie sowas.

    Und mehr Fächer haben wir Gott sei Dank nicht. Alles in allem für mich persönlich sehr lehrreich.

  14. Bei uns gibt es niemanden der Programmieren kann und außer mir und meinem Ausbilder gibt es auch keine anderen Informatiker hier. Was ich mache sind im Prinzip nur kleine Dinge die einem das Leben (arbeiten^^) einfacher machen sollen.

    Mein Problem war das ich schon einen Timer habe und IN diesem Timer soll bei einem Exception 10 Minuten pausiert werden, bevor der Timer wieder losrennt, aber das habe ich gelöst.

    Zurück zum Topic, alles was meine Form und deren Sichtbarkeit betrifft sieht so aus:

    		public Form1()
            {
                        this.FormBorderStyle = FormBorderStyle.None;
                        this.ShowInTaskbar = false;
                        this.Load += new EventHandler(Form1_Load);
    		}
    
            private void Form1_Load(object sender, EventArgs e)
            {
                this.Size = new Size(0, 0);
            }

    Funktioniert ja wie gesagt auch einwadnfrei, es sei denn ein Exception wird geworfen (Wie gesagt die Exception ist im Timer.Tick Event drin)

    catch (Exception ex)
                {
                    sw = new StreamWriter(tmpPath + "MessageClient.log", true);
                    sw.WriteLine(ex.Message + " " + DateTime.Now);
                    sw.Close();
                    Thread.Sleep(600000);
                }

    Dann taucht in der Taskleiste ein Fenster auf das einfach nur nervig ist und mit dem man nichts tun kann, weder schließen noch anklicken noch sonst irgendwas. Wenn die Sleep-Zeit vorbei ist tut es dann wieder und das Fenster ist verschwunden.

    Das wäre gerade "nur" ein Schönheitsfehler

  15. Ich hatte es mal probiert. Ich slebst kann kein WIndows-Service erstellen mit meiner Community-Edition. Mein Ausbilder hat es erstellt und ich sollte es bearbeiten aber dann waren da Dinge in der Anleitung die ich einstellen sollte und bei mir nicht gefunden habe also habe ich es gelassen.

    @Gottlike Steht bereits in meinem Code, macht es einen unterschied wenn ich es in den "Form_Load" reinschmeiße?

  16. Moin!

    Ich hab ein Programm das ähnlich wie ein Service im Hintergrund laufen soll. Es hat kein Fenster und wird auch nicht in der Taskleiste angezeigt.

    Soweit so gut funktioniert es auch. Benutzt dazu wurde folgender Code:

    					this.FormBorderStyle = FormBorderStyle.None;
                        this.ShowInTaskbar = false;
                        this.Load += new EventHandler(Form1_Load);
    
    private void Form1_Load(object sender, EventArgs e)
            {
                this.Size = new Size(0, 0);
            }

    Jetzt soll das auch bei Fehlern so bleiben, das Programm schreibt bei Fehlern in eine Text-Datei und pausiert dann für 10 Minuten bevor es erneut den Code in einer Schleife ausführt. Allerdings hab ich nun das Problem das anscheinend bei Thread.Sleep() das Programm in der Taskleiste mit buntem Symbol auftaucht. Man kann es nicht anklicken, es erscheint natürlich kein Fenster aber für den Benutzer ist es natürlich irritierend. Der Code zum Fehler abfangen sieht so aus:

    while ()
                {
                    try
                    {
                    }
    
                    catch (Exception ex)
                    {
                        sw = new StreamWriter(tmpPath + "TicianClient.log", true);
                        sw.WriteLine(ex.Message + " " + DateTime.Now);
                        sw.Close();
                        Thread.Sleep(600000);
                    }
    			}

    Eine Idee warum das so ist und wie ich das vermeiden kann?

  17. Ich hätte vielleicht noch hiinzufügen sollen das unsere PCs auch für die private Nutzung zugelassen sind (solange es nicht ausartet) - aber das natürlich mit EInschränkungen.

    Das mit dem Löschen oder Verändern war mehr so mit dem Gedanken "Ich darf die Excel-Datei die Frau xyz erstellt und auf ihrem Desktop gespeichert hat nicht einfach löschen".

    Zitat

    Grundsätzlich gilt: "Alles ist verboten, was nicht per Gesetz ausdrücklich erlaubt ist." (Zum Thema persönliche Daten und BDSG)

    Genau das hatte ich auch noch im Kopf, das wurde uns gesagt :)

    Meine Frage hatte sich allerdings jetzt geklärt, es wurde als "kritischer Bereich" deklariert, also Gebot ist vorsichtig sein, aber ein Gesetz dazu gibt es nicht.

  18. Also die praktische Erfahrung: Ich brauche Threading.

    Mein Timer (scheint nicht automatisch in einen neuen Thread geschoben zu werden) blockiert alle 10 sekunden meine GUI. Bzw es blockiert sie nicht, geklickte Check-Boxen oder ein Text der in eine Textbox geschrieben wird werden 'nachgeholt'.

    Aber ich schätze das kommt daher das ich einen Ping auf bestimmte Rechner absetze mit dem Timer und sich je nach Ergebnis das DataGridView in der GUI verändert. Und dann scheint eben nicht nur das DataGridView sondern die gesamte GUI mal für 2 Sekunden zu hängen, was dann doch etwas nervig ist.

    Bringt mir dann Threading überhaupt etwas? Der Timer steht ja im Zusammenhang mit einem Element der GUI...

    Noch etwas:

    Wenn ich IN einem timer Thread.Sleep(x) benutze wird dann allgemein der Timer pausiert sodass ich x Sekunden Ruhe habe oder fängt der Timer-Durchlauf nach seinem eigenem Interval mit einem neuen Durchlauf an?

  19. Guten Morgen,

    wir hatten letztens eine 1-stündige Datenschutzschulung für unsere Abteilung die mein Ausbilder leider verpasst hat und weswegen ich jetzt noch Fragen zu einem Thema habe.

    Und zwar wurde mir gesagt das das Löschen von Daten logischerweise verboten ist, aber auch das sämtliche Software-Änderungen dem Benutzer des jeweiligen Rechners mitzuteilen sind.

    Das giibt mir jetzt zu denken weil über die Gruppenrichtlinien machen wir hin und wieder Änderungen und die Beste Zeit um Software zu installieren oder zu verändern ist natürlich wenn der Benutzer nicht da ist. Gibt es dazu einen Ausschnitt aus einem Gesetzbuch? Wie sieht es mit PC-Tausch aus? Wir haben sämtliche PCs letztes Jahr auf Windows 7 umgestellt und es gab eine Mitarbeiterin die sich wehement geweigert hat ihren XP-Rechner tauschen zu lassen also haben wir das an einem Wochenende gemacht, aber das Geschrei hinterher war jenseits von gut und böse. Wie handhabt ihr das? Welche Regeln sind Betriebs-spezifisch, welche gelten für Datenschutz allgemein?

  20. Moinsen,

    ich kam heute durch eine Anforderung auf eine seltsame Frage die vielleicht jemand beantworten kann:

    Wenn ich ein Programm mit GUI habe, das einen Timer im Hintergrund hat der natürlich läuft und alle paar Sekunden eine Aktion ausführt, aber gleichzeitig Buttons habe die bei einem Klick ebenfalls Dinge ausführen brauche ich ja anscheinend kein Multi-Threading. Woher weiß ich denn wann ich Multi-Threading brauche und wann nicht? Was passiert denn genau wenn mein Code in einer Timer-Schleife ist und ich aber einen Button klicke der ein Ereignis auslöst? Wird das ancheinander verarbeitet? Gleichzeitig?

     

    Grüße

    Tician

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...