Laden...

Forenbeiträge von steschu Ingesamt 24 Beiträge

07.10.2013 - 11:01 Uhr

Hallo,

Ich rechne mit double Variablen, die ich dann am Schluss als String ausgebe:


textbox1.Text = Convert.ToString(meinDoubleWert);

Mein Debugger sagt mir, dass meinDoubleWert -0.13723006195467544 ist; auf dem Monitor kommt aber als Ausgabe -0,137230061954675 - es fehlen also zwei Nachkommastellen. Selbes Ergebnis, wenn ich z.B. die String.Format-Methode oder .ToString() zum konvertieren nutze.

Weiß jemand wieso das so ist bzw. wie bekomme ich alle Nachkommastellen angezeigt?

Viele Grüße,
Stephan

28.08.2013 - 09:23 Uhr

Hallo,

ich möchte gerne wissen (für C#), ob Klassenmethoden nicht-statischer Klassen pro Instanz Speicher beanspruchen.

Bsp.: Klasse 'Rechteck', mit Properties 'Laenge' und 'Breite', und der Methode 'GetFlaeche'. Der Code für 'GetFlaeche' ist ja für jede Instanz gleich - ich vermute, dass dafür also nur einmal Speicher reserviert wird. Bei vielen Tausend Instanzen von 'Rechteck' würde also die Performance nicht leiden. Liege ich damit richtig?

Danke,
Stephan

26.09.2012 - 09:28 Uhr

Hallo,

Ich muss feststellen, ob sich Strings unterscheiden oder nicht. Dabei sind diese Strings durchaus längere Textblöcke (mehrere tausend Zeichen). Mir sind folgende Lösungen eingefallen, und möchte gerne wissen, welche Ihr davon für am performantesten haltet...

  1. String.Compare-Methode verwenden
  2. String mit "=" Operator vergleichen
  3. Strings mit MD5 codieren. Dabei würde von String2 bereits der MD5Hash bekannt sein - so, dass für den Vergleichsvorgang nur die Berechnung des MD5Hash von String1 nötig wäre. Die beiden Hash-Werte werden dann z.B. mit String.Compare verglichen...
  4. bei beiden Strings das char-Array parallel durchlaufen und char für char vergleichen, bei der ersten nicht-Übereinstimmung, foreach-Schleife abbrechen

Nochmal zur Klarstellung: Ich brauche als Rückgabe nur true oder false. Mich interessiert weder, was unterschiedlich ist, noch die Position der ersten Unterscheidung o.ä.

Viele Grüße,
Stephan

10.12.2011 - 17:17 Uhr

Hallo,

Mit...

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new Service1(), new Service2(), new Service3() };
ServiceBase.Run(ServicesToRun);

...starte ich mehrere Windows Service. Werden dann diese Services alle in einem gemeinsamen Thread ausgeführt? Würde das dann bedeuten, dass wenn man in einem der Services, z.B. in der OnStop()-Methode, Thread.Sleep aufruft, auch die Ausführung der anderen beiden Services blockiert wird?

D.h., um dem entgegen zu wirken, müsste man jeden Service in einem separaten Thread starten?

Viele Grüße,
Stephan

10.12.2011 - 17:07 Uhr

Hallo,

Der System.Timers.Timer ElapsedEventHandler wird ja automatisch in einem eigenen Thread gestartet.

Ich benutze die System.Timers.Timer Klasse in einem Windows Service und möchte nun in der OnStop()-Methode des Windows Service checken, ob der Thread des ElapsedEventHandler noch läuft und das Stoppen des Service so lange hinauszögern bis der Thread beendet ist. Ungefähr so:

protected override void OnStop()
{
  while(<Thread des EventHandlers>.IsAlive)
  {
    Thread.Sleep(1000);
  }

  base.OnStop();
}

Ich prüfe also alle Sekunde, ob der Thread noch läuft, nur wie bekomme ich aber Zugriff auf den Thread des EventHandlers?

Viele Grüße,
Stephan

18.11.2010 - 13:35 Uhr

Hallo,

Weiß jemand, was der Doppelpunkt hinter dem Member in Intellisense bedeutet?

(siehe Screenshot im Anhang)

Grüße, S.

28.10.2010 - 14:31 Uhr

Vielen Dank, damit klappt's!

28.10.2010 - 11:46 Uhr

Hi,

Kennt jemand eine elegante Lösung wie man einen String, z.B.

BegriffA BegriffB "Zusammengesetzter Begriff" BegriffC

in ein Array zerlegt, also:

[0] = BegriffA
[1] = BegriffB
[2] = Zusammengesetzter Begriff
[3] = BegriffC

Viele Grüße,
Stephan

22.10.2010 - 18:04 Uhr

darf ich fragen für was das "\s+" in dem Ausdruck gut ist?

Der Ausdruck ist schlecht, denn er muss natürlich wenn dann @"-?\s?\d+(,\d+)?" lauten, damit auch negative Zahlen erkannt werden, bei denen der Schreiber ein Leerzeichen zwischen Vorzeichen und Zahl geschrieben hat.

Aber um ehrlich zu sein, muss ich erst in der Praxis austesten, ob dieser Fall überhaupt vorkommt, denn mit dem möglichen Leerzeichen kann es auch zu ungewollten negativen Zahlen kommen, bei eingeschobenen Sätzen. Bsp.:

"Heute morgen - 5 oder 6 Uhr - ging die Sonne auf!"

22.10.2010 - 17:21 Uhr

Vielen Dank, funktioniert. Ich hab's leicht modifiziert, um auch negative Zahlen zu erwischen: @"-?\s+\d+(,\d+)?"

22.10.2010 - 10:52 Uhr

Hallo,

Ich bastle mir gerade einen Parser, der die erste Zahl (Ganzzahl oder Kommazahl) aus einem Text extrahieren soll. Bsp.:

"3mm - 4mm" -> 3
"von 4 Uhr bis 5 Uhr" -> 4
"4,545kg und 6,4kg" -> 4.545

Dazu ersetze ich alle Zeichenketten, die nicht dem Muster 'Ziffer' oder 'ZifferKomma' entsprechen durch ein Leerzeichen.

Als entsprechende Regex dafür habe ich [^(\d+,?)] genommen. Funktioniert aber nicht.

Kennt sich jemand mit RegEx aus und kann mir helfen?

Danke,
Stephan

15.10.2010 - 13:56 Uhr

Wieso führt String.Replace("?", "_") nicht zur gewünschten Ersetzung?

10.04.2010 - 12:21 Uhr

Ich benutze jetzt die DataGridView, nach dem ich an anderer Stelle (z.B. Listview Flackert, egal was ich mache) immer wieder von Schwierigkeiten mit dem ListView gelesen habe...

09.04.2010 - 13:37 Uhr

Hallo,

Ich führe einen Verzeichnis-Vergleich aus schreibe einen Bericht in eine ListView. Die Methode, die den Verzeichnisvergleich macht, liegt in einem eigenen Thread. Dort "befülle" ich über

this.Invoke(...

meine ListView, in dem diese Methode aufgerufen wird:


private void writeLog(string sourceName, string targetName, string statusName, Color color)
        {
            listView1.SuspendLayout();
            listView1.BeginUpdate();

            ListViewItem li = new ListViewItem(sourceName);
            li.SubItems.Add(targetName);
            li.SubItems.Add(statusName);

            li.BackColor = color;

            listView1.Items.Add(li);
            listView1.EndUpdate();
            listView1.ResumeLayout();
        }

Leider flackert das ListView ohne Ende... Ist das normal? Gibt es nicht die Möglichkeit nur das neu hinzugefügte Item einzuzeichnen? Der Rest bleibt ja immer gleich...

07.04.2010 - 18:37 Uhr

Hi,

Neuer Stand: Der Fehler ist aufgekommen als ich mit

foreach (DirectoryInfo dir in source.GetDirectories())

die Unterverzeichnisse durchlaufen habe. Dort tauchen die Aliase auf, die aber so nicht existieren. Jedenfalls komme es zur Fehlermeldung. Wenn ich aber den tatsächlichen Pfad angebe, klappt es. Ich fange das jetzt mit try...catch ab.

Viele Grüße,
Stephan

06.04.2010 - 21:51 Uhr

Es gibt die Eigenschaften CommandArgument und CommadnName, die auch im EventHandler abgefragt werden können.

06.04.2010 - 21:49 Uhr

Hallo,

ich habe ein simples Backup&Sync-Programm geschrieben. Ich lese, vergleiche und schreibe mit FileInfo und DirectoryInfo Dateien. Beim Ordner, den ich als String mit "C:\Users&lt;userName>\Pictures" angebe, bleibt das Programm mit der Fehlemeldung

System.UnauthorizedAccessException: Der Zugriff auf den Pfad "C:\Users\username>\Documents\Eigene Bilder" wurde verweigert.

Ich bin Admin, aber auch "ausführen als Admin" führt zum selben Fehler. Ich verwende Windows 7.

An was könnte es liegen?

Danke und Gruß,
Stephan

15.02.2010 - 15:58 Uhr

Es funktioniert: Den Methodenaufruf, in der die Berechnungen stattfinden, in einen eigenen Thread ausgelagert und per Invoke die Methode aufgerufen, die die Status-Bar aktualisiert.

15.02.2010 - 14:33 Uhr

Die Änderung des Texts finden alle im Event Handler statt. Die Zuweisung des Dateinamens findet am Anfang der for each Schleife statt, danach weiter in der Schleife wird eine Klasse instanziert, mit der dann die Berechnungen stattfinden. Nach Beenden der Schleife kommt die Zuweisung "fertig!", also außerhalb.

Ich schau mir die Links einmal an. Habe schon irgendwas von Threads und so gelesen. Bin noch relativer Anfänger, von daher ist das Neuland für mich.

15.02.2010 - 13:54 Uhr

Hallo,

In einem MenuItem_Click Event Handler lasse ich in einer for each-Schleife Inhalte aus Dateien lesen und weiterverarbeiten. In der Statusleiste soll die gerade bearbeitete Datei angezeigt werden in einem toolStripStatusLabel, das in einem statusStrip liegt.

toolStripStatusLabel1.Text = theFileName;

Nach der for each-Schleife soll noch das Ende angezeigt werden:

toolStripStatusLabel1.Text = "fertig!";

Während des Schleifendurchlaufs pasiert gar nichts, das toolStripStatusLabel bleibt leer, danach wird aber "fertig!" angezeigt. An was könnte das liegen - muss man einen Refresh o.ä. ausführen?

Das Unverständliche für mich: Das hat alles schonmal funktioniert - dann habe ich den Code zum Weiterverarbeiten der Dateinhalte aus der Schleife in andere Klassen ausgelagert und auf einmal bleibt das toolStripStatusLabel leer?!

Grüße, Stephan

15.02.2010 - 10:50 Uhr

Hi,

Was ich gesucht habe ist ein Algorithmus, der aus den Koordinaten mehrerer Punkte (die verbunden eine eckige Linie ergeben) die Koordinaten (inkl. Aufhängungspunkte) der Punkte einer Bezierkurve errechnet, die diese eckige Linien als runde Linie "annähert".

Ich habe im Nachhinein festgestellt, dass die Assembly, die ich benutze (PDFSharp), bereits so eine Methode anbietet. Von daher ist mein Problem gelöst 😉

Vielen Dank und viele Grüße,
Stephan

12.02.2010 - 12:34 Uhr

Hallo,

Ich habe viele Punkte, die zusammen näherungsweise eine Kurve beschreiben. Natürlich sind die einzelnen Segmente, die sich jeweils aus zwei Punkten ergeben, gerade.

Wie kann man für jedes dieser Segmente die zwei zusätzlichen benötigten Aufhängungspunkte einer Bezierkurve errechen, so dass nach der Umwandung, eine tatsächliche Kurve herauskommt? Oder noch besser wäre es, wenn ich eine komplett neue Bezierkurve errechnen könnte, die mit so wenig Punkten wie möglich auskommt?

Ich habe etwas nach dem Thema gesucht, bin aber nicht so richtig schlau aus den vorgeschlagenen Lösungsmöglichkeiten geworden. 😦 Vieleicht hat jemand noch einen guten Hinweis. Mein Ziel wäre es eine Methode zu programmieren, der man ein Array von Punkten übergibt, und die das entsprechende Bezier zurückgibt.

Danke und viele Grüße,
Stephan

02.01.2010 - 13:57 Uhr

Hi,

Erstmal vielen Dank für die zahlreichen Antworten.

die Performance sollte nicht das Kriterium dafür sein, ob man eine class oder einen struct verwendet. Das einzige Kriterium sollte sein, ob es sich konzeptuell um einen reinen Wert oder um ein Objekt (mit Identität) handelt.

Coordinate ist wohl allerdings konzeptuell ein Werttyp.

Ja, genau deswegen wollte ich eine Struct nehmen...

Sehe ich das richtig, dass der Fall, dass mehrere Zig-Tausend Instanzen meiner Struct-Coordinate auf dem Stack liegen, nur eintreten würde, wenn ich sie einzeln im Code deklarieren würde?

Der Normalfall dürfte ja sein, dass man in einer Schleife, die Ausgangswerte aus einer Datenquelle liest, eine struct erzeugt und sie in der Schleife auch dann gleich an das abbildende Grafikobjekt weitergibt oder eben in eine Collection schiebt. Ein Kopie der Strcut wird damit übergeben (und wandert auf den Heap) und die eigentliche struct existiert nur im jeweiligen Schleifendurchgang... richtig?

Stephan

01.01.2010 - 20:00 Uhr

Hallo,

Ich plane eine Struct "Coordinate" zu erstellen, die ein Koordinaten-Paar darstellt (polare Koordinaten). Dazu gibt es noch ein paar Methoden - alles so ein bisschen ähnlich wie DateTime.

Jetzt sind ja Structs Wertetypen, die auf dem Stack verwaltet werden, was Performance-Vorteile bringt. Was ich aber nicht ganz verstehe ist, wieviel Instanzen der Stack so verträgt? Welche Größe hat der Stack bzw. kann man ihn ggf. vergrößern?

Im konkreten Fall können schon einmal mehrere zehntausend Coordinate Objekte instanziert werden, um das Endprodukt (eine Karte) angezeigt zu bekommen...

Viele Grüße,
Stephan