Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von OlafSt
Thema: Deinstallation von Visual Studio 2015 Pro scheitert an WebTools
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich würde eine Reparaturinstallation von VS2015 machen. Das zwingt zur Paketüberprüfung und Neuladen desselben. Dann sollte die Deinstallation auch klappen.

Thema: Würde man in der Praxis eine Form für zwei versch. Verwendungszwecke nutzen?
Am im Forum: GUI: Windows-Forms

Ließe sich die Entscheidung, ob Neu oder Editieren, nicht durch die Poperties leicht festlegen ?

Letztlich muß man ja die Angaben des Benutzers irgendwie aus dem Form wieder heraus bekommen. Üblicherweise nimmt man dafür ja Properties. Wenn man denen einen Setter verpaßt und dann von "außen" sozusagen die Poperties befüllt, steht doch automatisch fest, das ein Editieren vorliegt und man kann bereits im Setter seine Flags entsprechend setzen...

Thema: DLL oder eine abhängige Datei von Netzlaufwerk nicht gefunden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Meine Idee war ursprünglich, ob es nicht eine Möglichkeit in der Config gibt, den Pfad zu dem Assembly anzugeben, habe aber nichts gefunden.

Unterstreichung durch mich. Sollte es erklären ;)

Thema: Auswertung und Feedback zur DevOps-Umfrage
Am im Forum: Smalltalk

Ich habe lange überlegt, ob ich mich hier beteiligen sollte, oder nicht. Die Feindseligkeit gegenüber anders arbeitenden ist schon bedrückend. Aber lassen wir das, führt zu nix.

Ich arbeite seit kurzem in einem Unternehmen, das man getrost als "von vorgestern" bezeichnen könnte. Der Compiler ist von 1999, der Code - vorsichtig ausgedrückt - unstrukturiert, weitgehend undokumentiert und das (immerhin) verwendete SourceSafe mit seinem Ein-/Auscheck-Zwang ist immer wieder nervtötend.

Ich würde gern losziehen und hier als erstes ein nach heutigen Maßstäben vernünftiges VCS einführen. Git wäre da meine erste Wahl, doch wenn man so gar keine Ahnung davon hat, ist man auch nach mehrstündiger Recherche nicht ernsthaft schlauer. Ich weiß das aus Erfahrung, denn ich habe schon dreimal versucht, mich da einzufuchsen. Das Problem dabei ist: Es gibt massenhaft Tutorials (auch hier), die mir zeigen, wie ich was wo installieren muß und wie ich ein Repo anlege.

Doch wenn das Repo auf einem Server liegt, damit auch mein Kollege damit arbeitet ? Kein einziges der Tutorials kam bis zu diesem Punkt und ein lokales Repo ist nur was für Einzelkämpfer, nicht für Team-Development.

Zu DevOps sieht das nicht wirklich besser aus, doch zähle ich hier auf die Community, die offenbar was davon versteht. Mir ist da z.B. völlig schleierhaft, welchen Vorteil ich aus einem über Nacht erzeugten Kompilat haben soll. Ist es tatsächlich inzwischen üblich, das man am Code Änderungen vornimmt und diese einfach nur eincheckt, ohne das ganze wenigstens einmal durch den Compiler zu schubsen ? Wenn ja, bleibe ich Oldschool...

Auch sehe ich keinen ernsthaften Nutzen aus einem Release-System. Unser Kundenkreis ist überschaubar (vielleicht ein dutzend Kunden), wir entwickeln ausschließlich Desktop-Anwendungen, der Anteil an Webentwicklung ist Null, der Anteil an Mobile Apps ist Null. Es existiert auch gar kein Bedarf in unserem Bereich für so etwas. Wozu also Releases, ergo wozu ein Release-System ?

Aufgrund des überschaubaren Kundenkreises gibt es auch gar keine Testsysteme hier. Aber womöglich ist damit etwas ganz anderes gemeint, als ich im Moment denke.

Gibt es ein paar wirklich brauchbare Artikel, die einem den Nutzen eines DevOps-Systems aufzeigen kann ? Welchen Aufwand müßte ich betreiben, um auch eine "exotische" Sprache wie Delphi oder Assembler mit in den Prozess zu integrieren ? Macht sowas überhaupt Sinn, wenn man mit Web oder Mobile nichts, aber auch rein gar nichts am Hut hat ?

Fragen über Fragen.

Thema: Wer Leerzeichen zum Einrücken von Code verwendet, verdient mehr!
Am im Forum: Szenenews

[Narrenkappe]
Verdammt... Ich benutze immer TAB zum Einrücken, lasse das aber in den Einstellungen der IDEs immer durch Leerzeichen ersetzen. Werde ich jetzt gefeuert ?
[/Narrenkappe]

Man muß sich wundern, wie stark dieses Phänomen inzwischen um sich gegriffen hat. Bestes Beispiel: Wahlausgang Brexit, Wahlausgang Präsidentenwahl USA und auch die Wahlergebnisse der SPD, die so gar nicht den Analysen entsprachen...

Thema: Anbieter für Code Signing Certificates für exe
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

So einen Zampano hatte ich nicht am Hals. Eine DUNS-Nummer und die Gewerbeanmeldung waren ausreichend. Kann aber sein, das das ominöse OV so eine F2F-Geschichte nötig macht.

Thema: Anbieter für Code Signing Certificates für exe
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich habe gerade heute mein Code Signing-Zertifikat bekommen. Ich habe dies über K Software geordert, die - wie schon gesagt - nur ein Reseller für Comodo sind. Nachdem dann Comodo auch kapiert hat, das ich als Einzelunternehmer trotzdem ein Unternehmen habe, ging das reibungslos.

Habe für ein Jahr USD84,00 bezahlt, also knapp 81€. Probleme mit dem Timestamping hatte ich nicht, das Zertifikat wird auch problemlos von VS2015 angenommen und die resultierende EXE ist dann signiert.

Thema: Koordinaten nach ihrem Abstand zueinander aber ich richtiger Richtung sortieren
Am im Forum: Grafik und Sound

Eigentlich ganz einfach.

Man nehme Punkt[0]. Nun berechne Er alle Entfernungen der Punkte[1..n]. Der, der am dichtesten dran ist, wird dann Punkt[1].

Man nehme Punkt[1]. Nun berechne Er alle Entfernungen der Punkte[2..n]. Der, der am dichtesten dran ist, ist Punkt[2].

Und so weiter.

Entfernungen nur einmal berechnet, Ergebnis-Liste gleich sortiert.

Thema: Anwendung zur Messdatenaufbereitung und Datensammlung in einer Datenbank - Was ist eure Meinung?
Am im Forum: Rund um die Programmierung

IMHO sieht das nach einer Zweiteilung aus. Teil 1 ist eine simple Konsolenanwendung, die einfach per geplantem Task angestoßen wird und die Dateien bearbeitet. Ich bin mir ziemlich sicher, das da schon ein SQL-Server existiert - an den kannst du dich bestimmt "dranhängen" und dort deine usgewerteten Daten hineinschreiben. Teil 2 wäre dann eine GUI-Anwendung, die einfach aus den Daten aus dem SQL-Server die gewünschten Infos extrahiert und zur Anzeige bringt.

Webserver halte ich da für eher ungeeignet.

Thema: Wie kann man ein Pixel in C# plotten?
Am im Forum: Grundlagen von C#

Anders formuliert: Dre TE stammt aus einer Zeit, wo man 5 Zeilen aus einem Buch abtippte und das Ergebnis war auf dem Bildschirm. Kenn ich auch noch, sowas.

Diese Zeiten sind schon lange vorbei.

Es braucht nun ein wenig Einarbeitung, bis man begriffen hat, das es keinen Grafikmodus mehr gibt (weil man durch das Betriebssystem schon längst im Grafikmodus ist) und bis man verstanden hat, wie man nun einen Pixel irgendwo hin setzt.

Thema: Bilder (byte[]) in eine MSSQL DB speichern
Am im Forum: Datentechnologien

Die Konvertierung ist wohl möglich.

Abt verlangt von dir nur, das eindimensionale Array in das zweidimensionale Array umzuwandeln, von dem er dir nicht verrät, wie es aussieht.

Denn genau das verlangst du vom SQL-Server bzw. deinem Programm auch, weshalb das ganze mit einer unwillig wirkenden Fehlermeldung antwortet.

Thema: Alle Ping's auf Router sehen/auslesen
Am im Forum: Smalltalk

Zitat
Aber mich verwundert es, dass das Thema noch fortgeführt wird.
Hier ist eigentlich nicht der richtige Ort um Netzwerkthemen, die nichts spezifisches mit Programmierung sondern mit Netzwerkgrundlagen/Einrichtungen zu tun haben, behandelt werden.

Warum denn auch nicht - ist ja der Offtopic-Bereich hier. Was mir die Gelegenheit gibt, den Finger mahnend zu erheben und darauf hinzuweisen, das der Versuch einer (D)DOS-Attacke bereits eine strafbare Handlung darstellt. Auch wenn es nur experimentell oder aus Jux ist. Solange man das ganze auf einen Server losläßt, der nicht von einem selbst kontrolliert wird, ist das Computersabotage.

Aber zum Glück machen wir solchen Kleinkinder-Blödsinn nicht ;)

Thema: C# 7.0 -- welche Features werden kommen
Am im Forum: Szenenews

Viele der Neuerungen, die angedacht sind, finde ich super. Speziell die out-Geschichten, die immer etwas hakelig waren und der Stunt mit den Tuples.

Defnitives No-Go sind aber IMHO die lokalen Prozeduren. Ich kenne dieses Konstrukt aus Delphi, das ich über Jahrzehnte verwendet habe, bis ich in die C#-Schiene gewechselt habe. Und glaubt mir: Die Dinger taugen zu rein gar nichts. Sie machen den Code erheblich unlesbarer und sehr viel schwerer zu durchschauen.

Das mag zum Teil daran liegen, das ich sehr viel mit "altem" Code zu tun habe. Prozeduren mit > 10k LOC sind da wahrlich keine Ausnahme, sondern die Regel. Dann noch 22 lokale Prozeduren dazu und du siehst wirklich gar nichts mehr. Ich entnehme dann in aller Regel diese lokalen Prozeduren und mache Unit-interne Prozeduren daraus, was den Code solcher Monster-Funktionen fast immer erheblich einfacher zu durchschauen macht.

Glaubt einem mit 20 Jahren Erfahrung mit diesem Zeugs ;) Dies ist einer der Syntax-Zucker-Elemente, die auf gar keinen Fall in meinen C#-Code gelangen.

Thema: Form über Text erzeugen/darstellen
Am im Forum: GUI: Windows-Forms

Wenn es nicht zuviele Forms werden und der Satz an Kommandos von der SIO (Serial I/O) ist bekannt, wäre dies vielleicht ein praktikabler Weg:

Erstelle alle Forms, die zu den SIO-Kommandos passen. Erzeuge ein Dictionary, in das du die Forms hineinpackst und dazu passend den Kommandostring von der SIO.

Wenn nun ein Kommando von der SIO kommt, kannst du im Dictionary nach diesem String suchen und die dazugehörige Form einfach anzeigen.

Aufräumen bei Programmende nicht vergessen ;)

Thema: FixedStrings von altem VB6-Code in C# übersetzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ím wesentlichen kann man hier problemlos einen normalen String verwenden.

Problematisch wird es nur, wenn diese Struktur in eine Datei geschrieben wurde und wieder ausgelesen werden soll. Dann muß man tatsächlich bei einem String*20 auch exakt 20 Zeichen auslesen - dies hat sonst der Compiler von VB6 für einen erledigt.

Thema: VS2015 Intellisense: Wie springe ich ans Ende einer Zeile nach der Eingabe eines Strings?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

VS2013 macht das auch. Ich habe mich daran gewöhnt, einfach weiterzutippen. Ich habe festgestellt, das dies der schnellere Weg für mich ist - ansonsten müßte ich ja erst umständlich weg vom Buchstabenfeld zum Cursorblock, dort ENDE drücken und wieder zurück. Dauert länger als ") zu tippen.

Thema: RS232-USB Adapter and XP-Maschine anschliessen
Am im Forum: Rund um die Programmierung

Der PC reagiert da gar nicht auf das Gewackel an irgendeinem Pin...

Tatsächlich gab es damals™ Einsteckkarten für serielle und parallel Schnittstellen. Auf diesen war ein 40-Pin-Chip drauf, ein UART8250 oder (moderner) 16450 oder (noch moderner) 16550. DIESER reagiert auf das Gewackel an den Pins und wirft am Ende einen Interrupt am ISA-/PCI-/PCIe-Bus raus.

Auf diesen Interrupt reagiert der PC und holt das empfangene Byte aus dem UART heraus.

Ganz ehrlich: Das ganze ist wesentlich komplexer, als du ahnst Ohne ein gerüttelt Maß an Elektronikkenntnissen wird das schwer zu kapieren sein Ich würde mich erstmal auf die Programmierung überhaupt konzentrieren, für die Details ist später noch Zeit.

Thema: [Tutorial] Windows Services mit C#
Am im Forum: Artikel

Mit VS2013 Community und gegen .NET4.5 muß man eine Kleinigkeit beachten. Denn: Der Namespace "System.Configuration.Install" scheint gar nicht mehr zu existieren 8o Die MSDN-Hilfe von Microsoft führt auf eine völlig falsche Fährte (man ist geneigt zu glauben, das sei .NET3.5 und älter).

Tatsächlich muß man zunächst einen Verweis auf "System.Configuration.Install" hinzufügen, dann hat man auch einen ".Install"-Namespace und auch eine Klasse "Installer".

Thema: Mit foreach- und for-Schleifen über ein Array iterieren
Am im Forum: Grundlagen von C#

Am besten sieht man den Unterschied, wenn man den Inhalt des Arrays umdreht:

int[] meinArray = new int [] { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };


Läßt du dieses Array durch die beiden Originalschleifen laufen, siehst du deutlich, was anders läuft.

Thema: Review: Datentypen Umrechnung
Am im Forum: Code-Reviews

Ich glaube, hier hat der TE den Unterschied zwischen Bytes und Zeichenketten noch nicht verstanden.

Empfängt man die Bytes "02 AE" und schreibt diese in eine Textdatei, dann zeigt Notepad nun mal nicht automatisch "44546" an, sonden zwei kryptische Zeichen.

Thema: Einsteigerfragen zu Datentypen und Operatoren
Am im Forum: Grundlagen von C#

bei stackoverlow gibts da eine schöne Erklärung:

Ursprünglich waren "&&" und "||" rein logische Operatoren, während "&" und "|" rein binäre Operatoren waren. Irgendwann hat man die Sprachen dahingehend erweitert, das die Benutzung von "&" und "|" in rein logischem Kontext zur vollständigen Auswertung des Ausdrucks führt, wärend "&&" und "||" auf "Kurzschluß-Verfahren" umgemünzt wurden.

So ist es nun absolut möglich, solche Konstrukte zu bauen:


a=null;
if ((a != null) && (a > 4)) { ... }


Ist einer der Vergleiche in einem AND-Ausdruck false, ist das gesamte Ergebnis false. Da "a != null" bereits false ist, wird "a > 4" gar nicht erst geprüft - das Ergbniss kann eh nicht mehr true werden ;) Dies ist die "short curcuit evaluation".

Benutzt man dagegen

a=null;
if ((a != null) & (a > 4)) { ... }


und a ist tatsächlich null, dann knallts, denn der Ausdruck "a > 4" wird, obwohl das Ergebnis bereits feststeht, dennoch ausgewertet.

Das gleiche funktioniert mit dem "||" bzw. "|" ganz genau so.


Benutzt man "&" und "|" dagegen nicht in einem Logik-Kontext, dann wird das ganze als binärer Operator betrachtet. so kann man z.B. sehr einfach das Bit 4 in einem Integer setzen: i = i | (1 << 3) oder kürzer i = i | 8 oder noch kürzer i |= 8.

Thema: Erster Versuch mit async/await
Am im Forum: Code-Reviews

Zitat von witte
Du wartest doch gar nicht:


var Res=ScanFilesRecursiveAsync(DirInfo.FullName, Extensions);
=>


return await Task<List<string>>.Run(async () =>
...
var Res=await ScanFilesRecursiveAsync(DirInfo.FullName, Extensions);

8o

Ich habe mich immer gefragt, warum ich nicht "var Res=await Scan... " aufrufen konnte - der Compiler hat sofort losgemosert. Jetzt ist mir das klar: Der Delegat muß auch einen async-Modifizierer haben. Einmal async, immer und überall async.

Mit dieser Änderung entstehen nun erheblich weniger Threads (17, ab und zu ein 18.) - wie ich es eigentlich schon am Anfang erwartet hatte. Dem Gerappel auf der Platte nach zu urteilen warten die nun auch fleißig aufeinander. Nichts anderes wollte ich erreichen: Es sollte immer nur ein Task zur Zeit aktiv mit dem Laufwerk arbeiten, alle anderen sollten abwarten (bin schon vor 2 Dekaden, als Multithreading aufkam, über dieses problem gestolpert). Zugleich will ich aber meine GUI aktiv behalten.

Cleverer waäre es natürlich gewesen, das gleich in einen einzelnen Task oder Thread zu stecken, aber dann hätte ich halt nicht kapiert, wie async/await funktioniert und wie es korrekt benutzt wird.

Ist euch sonst noch eine Häßlichkeit aufgefallen, die man als fähiger C#-Programmierer nicht machen sollte ?

Thema: Erster Versuch mit async/await
Am im Forum: Code-Reviews

Darum auch meine Frage: Laufen diese Tasks wirklich alle nebeneinander her ? Wenn ja, welchen Sinn hat dann "await" ? So wie ich das verstanden habe, wartet "await" quasi doch darauf, das der Task durchgelaufen ist...

Ansonsten ist es mir schon klar, das man den Schreib-Lese-Kopf nicht überfordern sollte ;)

Thema: Erster Versuch mit async/await
Am im Forum: Code-Reviews

Hallo Freunde,

ich habe mich mal an ein für mich nützliches Utility gemacht. Im wesentlichen ist das nur ein Dateiscanner, der aber die gefundenen Dateien später im gesamten Haus-LAN verfügbar machen soll.

Kernstück des ganzen ist natürlich die Dateisuche und mich nervte die Tatsache, das die GUI dabei einfriert. Schreit ja nach async/await

Zum testen also einfach ein WinForm aufgemacht, ein Menü drauf, eine Listbox und zwei Labels.

Der Handler für den Menüpunkt wirft die ganze Arie an und erwartet eine Liste mit Dateinamen zurück. Diese Liste wird in die Listbox gefüllt und noch ein bissel Prosa ausgegeben:


        private async void filmeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FileScanClass fsc = new FileScanClass();
            fsc.OnScanDirectory += OnScanDirectory;


            List<string> li=await fsc.ScanFilesRecursiveAsync("C:\\", new string[] {"*.ts"});
            for(int i=0; i<li.Count;i++)
               listBox1.Items.Add(li[i]);
            label1.Text = "Durchsuchtes Verzeichnis: fertig";
            MessageBox.Show(string.Format("Scan complete. Directories scanned: {0}. Files found: {1}", fsc.DirsScannedCount, li.Count));
        }

Ich habe das ganze Filescanning in eine eigene Klasse verpackt, die aus Jux und Dollerei für jedes durchsuchte Verzeichnis einen Event auslöst. So kann die GUI dem Benutzer anzeigen, das was passiert - etwas, das seit Windows 8 völlig aus der Mode kommt.

Durch Async/Await scheint das ganze in einem eigenen Thread zu laufen, weshalb hier kräftig Invoked werden muß:


        private void OnScanDirectory(object sender, ScanDirectoryEventArgs e)
        {
            if (label1.InvokeRequired)
            {
                label1.Invoke(new MethodInvoker(delegate
                {
                    label1.Text = "Durchsuchtes Verzeichnis: " + e.DirectoryName;
                    label2.Text = "Durchsuchte Verzeichnisse: " + e.ScanCounter.ToString();
                    label1.Update();
                    label2.Update();
                }));
            }
            else
            {
                label1.Text = "Durchsuchtes Verzeichnis: " + e.DirectoryName;
                label2.Text = "Durchsuchte Verzeichnisse: " + e.ScanCounter.ToString();
                label1.Update();
                label2.Update();
            }
        }

Fehlt uns nur noch die eigentliche Dateisuche selbst, respektive die Klasse, die ich dazu gebastelt habe (///-Tags entfernt, der Post ist schon lang genug):


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace MScanner
{
    public class ScanDirectoryEventArgs : EventArgs
    {
        private string DirName;
        private long ScanCount;

        public ScanDirectoryEventArgs(string Dir, long ScanCounter)
        { 
            DirName = Dir;
            ScanCount=ScanCounter;
        }
        public string DirectoryName
        {
            get
            {
                return DirName;
            }
        }
        public long ScanCounter
        { 
            get 
            { 
                return ScanCount; 
            } 
        }
    }

    class FileScanClass
    {
        public delegate void ScanDirectoryEventHandler(object source, ScanDirectoryEventArgs e);
        public event ScanDirectoryEventHandler OnScanDirectory;
        private long _DirCount;

        public long DirsScannedCount { get {return _DirCount;} }

        public FileScanClass()
        {
        }

        public async Task<List<string>> ScanFilesAsync(string SourceDir, string Extension)
        {
            return await ScanFilesAsync(SourceDir, new string[] { Extension });
        }

        public async Task<List<string>> ScanFilesAsync(string SourceDir, string[] Extensions)
        {
            return await Task<List<string>>.Run(() =>
                {
                    List<string> li = new List<string>();
                    DirectoryInfo di = new DirectoryInfo(SourceDir);
                    if (OnScanDirectory != null)
                        OnScanDirectory(this, new ScanDirectoryEventArgs(SourceDir, _DirCount));
                    _DirCount++;  //Kein wirkliches Multithreading, sollte also safe sein
                    foreach (string s in Extensions)
                    {
                        FileInfo[] fi = di.GetFiles(s);
                        foreach (FileInfo f in fi)
                        {
                            li.Add(f.FullName);
                        }
                    }
                    return li;
                });
        }

        public async Task<List<string>> ScanFilesRecursiveAsync(string SourceDir, string[] Extensions)
        {
            return await Task<List<string>>.Run(() =>
            {
                DirectoryInfo[] Dirs;

                List<string> li = new List<string>();
                DirectoryInfo di = new DirectoryInfo(SourceDir);
                if (OnScanDirectory != null)
                    OnScanDirectory(this, new ScanDirectoryEventArgs(SourceDir, _DirCount));
                Interlocked.Increment(ref _DirCount); //Durch Multithreading muß das abgesichert sein
                try
                {
                    Dirs = di.GetDirectories();
                }
                catch (UnauthorizedAccessException)
                {
                    //Kein Zugriff auf dieses Verzeichnis, also leere Liste
                    //und weg hier
                    return li;
                }
                foreach(DirectoryInfo DirInfo in Dirs)
                {
                    var Res=ScanFilesRecursiveAsync(DirInfo.FullName, Extensions);
                    li.AddRange(Res.Result);
                }
                foreach (string s in Extensions)
                {
                    FileInfo[] fi = di.GetFiles(s);
                    foreach (FileInfo f in fi)
                    {
                        li.Add(f.FullName);
                    }
                }
                return li;
            });
        }
    }
}

Es gibt dort zwei Methoden, die die Arbeit verrichten. ReadFilesAsync liest nur ein einzelnes Directotry aus; ReadFilesRecursiveAsync macht das auch, wandert aber auch durch eventuell vorhandene Unterverzeichnisse (underen Unterverzeichnisse etc) hindurch. Von Interesse ist auch nur die rekursive Methode, diese wird primär zum Einsatz kommen.

Meine Frage zu diesem Stück Code:

Es entstehen gewaltige Mengen an Threads, wenn diese Routine z.B. auf C:\ losgelassen wird (bis zu 40 zeigt der Taskmanager an). Da mir die Funktion von Async/Await noch immer ein wenig schleierhaft ist: Laufen diese wirklich alle zeitgleich oder wartet der Task, der gerade C:\Windows durchsucht, auf den Task, der C:\Windows\System32 durchsucht - der auf den Task wartet, der C:\Windows\System32\Microsoft durchsucht ?

Danke fürs drüberschauen.

Thema: Funktionsweise von Methoden als Parameter in Methodenaufrufen [==> Delegaten]
Am im Forum: Grundlagen von C#

Zitat von joshit
EDIT: Eine Sache habe ich noch nicht verstanden. Wenn ich mit func die Signatur vorgebe - wie und warum funktioniert der Parameterlose Aufruf??

Ich bezweifle, das das ernsthaft parameterlos ist. Die Deklaration von converter.ConvertMyObjectToString ist mit sicherheit irgendwas in der Art

public string ConvertMyObjectToString(T, int VerySpecialNeededNumber)


Du meldest ja in der Parameterliste einen Func<T, int, string> an. Damit ist nur der Name der Methode gemeint, die letztlich ausgeführt werden soll. Die Parameter für diese auszuführende Methode kommen ja woanders her:

sb.AppendLine(method(item, counter));

item und counter sind die Parameter, die an ConvertToMyObject übergeben werden - ergo an den Func<T, int, string> (string ist der Rückgabewert, kein Parameter !). Die Params müssen natürlich nicht mitangegeben werden, nur der Methodenname ist von Belang - ob die angegebene Methode auch paßt, prüft der Compiler.

Ich hoffe, das war verständlich. Ich habe auch ne ganze Weile damit auf Kriegsfuß gestanden, bis ich mir vor Augen gehalten habe, wie das in Delphi/Object Pascal letztendlich aussehen würde. Da gibts sowas auch.

Thema: Updatesystem.net kann Datei nicht überschreiben
Am im Forum: Grundlagen von C#

Der Autor vom UpdateSystem.NET ist sehr aktiv bei VB-Paradise - IIRC hat er das dort sogar als erstes vorgestellt. Vielleicht fragst da nochmal nach ;)

Thema: Projekt: PacMan
Am im Forum: Projekte

Das der Pacman beim Abbiegen an einer Wand oder Ecke hängen bleibt, ist n bissel nervig Der geübte WASD-WoW-Zocker kriegt da schnell ne Zornesader :auf der Stirn Aber dagegen gibt es ein Mittel. Das original-Pacman aus den 70er Jahren ist einfach so lange in die bisherige Richtung weitergelaufen, bis es abbiegen konnte - allerdings nur solange, bis es einen (oder waren es zwei ?) "Freßpunkte" überquert hatte (unabhängig davon, ob der Punkt nun tatsächlich gefressen wurde oder nicht). Jedes Kommando zur Richtungsänderung hat diese "Warten bis ich abbiegen kann" natürlich überschrieben.

Ansonsten finde ich das ganze echt gelungen - den Code habe ich mir allerdings nicht angeschaut, der ist ausdrücklich aus dieser Wertung ausgenommen

Thema: [gelöst] - Zahlen anzeigen/parsen aufgrund von Format ohne CultureInfo
Am im Forum: Grundlagen von C#

Das stimmt, sie benutzen den gregorianischen Kalender. Darum ist der 02.06.2015 in unseren Breiten auch der 02.06.2015 in China. Keine Frage. Aber die Chinesen haben eine eigentümliche Schrift und ich habe den 02.06.2015 in Chinesisch auch hier posten wollen - nur leider kriegt das Forum das nicht so ganz hin.

Darum hänge ich das genannte Datum in chinesischer Form mal hier als PNG dran. In der ersten Zeile, wie es üblicherweise geschrieben wird, darunter die verwestlichte Form mit Zahlen wie wir sie kennen.

Thema: [gelöst] - Zahlen anzeigen/parsen aufgrund von Format ohne CultureInfo
Am im Forum: Grundlagen von C#

Das ist sehr löblich - aber IMHO der falsche Weg.

benutzerdefinierte Formatierungen betreffen nicht nur Währungen (von denen du übrigens nicht alle Optionen anbietest - Währungskennzeichen und -position anyone ?). Das Spiel geht weiter mit Datumsangaben: Trenner zwischen den einzelnen Elementen, Position der einzelnen Elemente, 2- oder 4-stellige Jahreszahl und und und. Und das ganze nocheinmal für die Uhrzeit.

Tatsächlich ist es so, das der Benutzer in der Regel genau weiß, welche Landesspezifische Formatierung er gerne haben will. Wenn jemand die en-US-Formatierung für Währungen will, dann will er fast immer auch das Datum in en-US. Windows hat weit über 150 verschiedene, länderspezifische Formatierungen in seinen Innereien (und da gibt es echt einige haarsträubende Exoten drunter), die du erst umständlich nachprogrammieren müßtest. Spätestens bei den Chinesen, wo der 02.06.2015 überhaupt keine von uns gewohnte Formatierung besitzt (ja nicht mal entsprechende Symbole), bist du geplatzt ;)

Ich würde dem User eine Liste der verfügbaren Formatierungen anbieten und damit dann arbeiten.

Thema: Wie autonome Fahrzeuge die Welt verändern werden
Am im Forum: Smalltalk

Zitat
Unter den elf Kollisionen sind allein sieben Auffahrunfälle - und dagegen, schreibt Google-Manager Urmson, könne derjenige, auf den der Hintermann auffährt, nur wenig tun. Das Problem hat ein computergesteuertes Auto natürlich genauso wie jeder menschliche Fahrer.

Verzeihung, aber da liegt der Google-Manager falsch. Natürlich gibt es eine Gegenmaßnahme gegen Auffahrunfälle. Nennt sich Sicherheitsabstand.

Nichtsdestotrotz ist die Leistung dieser autonomen Fahrzeuge echt beeindruckend.