Wie kommst du auf den Unsinn?
Gerade mit .NET Core/5/6 und neuere Versionen hat sich .NET ordentlich weiterentwickelt bzw. entwickelt sich immer weiter.
Damit natürlich auch alle Sprachen von .NET allen voran C#, was immer neuere Sprachfeatues bekommt.
Wenn du damit arbeiten willst, dann lohnt es sich auch die Sprache zu lernen.
@Sweeney
Hat nichts mit Offtopic zu tun.
Gehört sogar zu den Grundlagen des Themas und ist auch ein wichtiger Hinweis, den ich als Außenstehender nicht wissen kann.
Diese Info gehört auch direkt in den Start Post, damit man die Ausgangslage kennt und dann auch richtig antworten kann.
Warum man auf Curl setzen muss erklärt sich mir immer noch nicht, da es ja nur ein Http Post macht, den du auch selbst direkt absetzen kannst.
Wenn der Hersteller hier keine Einschränkung auf den User Agent o.ä. macht um nur Curl Anfragen zuzulassen, wäre das eine sinnvollere Option als einen extra Prozess zustarten.
Sowas kann man aber auch recht einfach selbst austesten.
Ebenfalls wäre dann aber immer noch das Json Thema im Raum.
Auch hier würde ich meine Empfehlung beibehalten und es per Serialisierung sauber lösen.
Json Strings selbst zusammen zu setzen ist hier komplett unnötig un kostet dich nur zusätzlich Zeit.
Dafür gbt es System.Text.Json oder Alternativ auch NewtonSoft.Json seit Jahren saubere Lösungen.
Nachtrag:
Hab anhand deines Aufruf mal die Api Doku geprüft.
Hierbei wird GraphQL verwendet aber als query String im Request mitgegeben.
Im einfachsten Fall kannst du dir eine simple Request Klasse mit Query als String anlegen und per Json serialisieren lassen.
Nur die eigentliche Query muss dann sauber umgesetz sein.
Oder du könntest dem Rat von Abt folgen und das ganze einfach über einen Services anbieten.
Im einfachsten Fall mit einer Http Api wie WebAPI auf REST und Json Basis.
Mit Https hast du dann auch direkt eine sichere Datenübertragung, was man mit Lets Encrypt heute ohne großen Aufwand aufsetzen kann.
Dann ist deine DB sauber auf dem Server ohne äußerliche Zugriffe und dein Service kann sauber durch Authentifizierung den Zugriff kontrolllieren.
Warum arbeitest du nicht direkt mit dem HttpClient?
Im Endeffekt machst du nur ein HTTP Post mit Json per CURL, was du auch selbst machen kannst.
Spart den Overhead ein extra Pogramm aufzurufen müssen.
Den Request kannst du, wie schon beim Response, über ein eigenes Objekt zum passenden Json serialisieren lassen.
Dadurch löst du auch direkt deinen falschen Syntax, wie Th69 bemerkt hat.
Ebenfalls sieht auch der Rest des Json falsch aus, da du hier keinen korrekten Aufbau hast.
Kannst du alles mit einer passenden Klasse lösen.
Klingt eher komisch, da eine Demo Version davon kaum Resharper installieren dürfte.
Hast du das ggf. durch andere (Dev)Tools ggf. mitinstalliert?
Ansonsten ist Resharper ganz gut und der Hersteller JetBrains hat mit Rider auch eine eigene IDE für C# und andere Programmiersprachen.
Ist an sich also gutes Zeug.
Im ersten Schritt sollte man erstmal nach einer Api dafür fragen.
Wenn es dafür keine gibt, was mich nicht überraschen würde, kannst du ohne Rückfragen nicht ohne weiteres die Suchfunktion zum automatisierten Abfragen missbrauchen.
Damit kannst du dir viel Ärger einheimsen, was man gerade bei Behörden tunlichst vermeiden sollte.
Ansonsten bleibt noch die Option mit der Behörde in Kontakt zutretten.
Ggf. können die Informationen oder Ansätze liefern um solche Abfragen auch sauber umzusetzen.
Vielleicht kann dann eine Rücksprache mit den Entwicklern der Seite noch zu einer Api Umsetzung führen.
hast du dich überhaupt mal mit MongoDB beschöftigt oder machst du nur Trial and Error?
MongoDB ist eine Dokumenten Datenbank (NoSQL).
Du arbeitest hier nur mit Json, musst also die Daten per De-/Serialisierung zwischen deinem Code und JS konvertieren.
Die Doku samt Quick Tour hast du, damit kannst du im Grunde alles machen.
Ansonsten solltest du von DataTable die Finger lassen.
Du kannst hier mit Data Binding arbeiten und direkt die richtige DataSource mitgeben.
Ist alles dokumentiert, musst du nur lesen und umsetzen.
Nachtrag:
Nutzt bitte, wie schon zwei mal per Kommentar Edit empfohlen, auch die Code Tags.
Dein Code lässt sich sonst sehr schlecht lesen, was kaum zu mehr Hilfe motiviert wenn man lieblos den Code ohne Formatierung postet.
Die Fehlermeldung sagt doch schon alles.
Du kannst mit deinen Daten keine Verbindung zum Server herstellen, hier knallt es sogar direkt bei Socket.
Wenn hier ggf. eine Firewall zwischen dir und dem Server liegt, scheint diese die Verbindung zu blocken.
Kann auch lokale Firewall des Servers oder Clients sein.
Du bekommst mit ListDatabaseNames nicht die Tabellen sondern die Datenbanken.
Laut Doku sollte es hier auch keine Exception geben, was auf einen Fehler wie z.B. Verbindungs- oder Rechteprobleme hinweist.
Nur mal kurz googeln liefert Anleitungen für Bluetooth LE Plugin für Xamarin sowohl für android als auch iOS.
Das Projekt scheint auch recht aktiv zu sein.
Das was du dort machst nennt sich übrigens Reflection.
Dies ist dann Teil der Metaprogrammierung von C#/.NET
Sollte man aber nur verwenden, wenn es wirklich nötig ist.
Anbei solltest du dir bei Klassen zur Datenhaltung auch Properties anschauen.
Damit hat man dann die eigentliche Schnittstelle zu den Feldern.
@Th69
Kommt dadurch, dass auf der Projekte Seite bei Github noch die alte Klasse verwendet wird, siehe Link oben.
Erst im Sample, was ich im letzten Kommentar verlink habe, werden dann die richtigen Klassen verwendet.
Soweit ich dies sehen kann, scheint es auch welche zu geben.
Diese sind dann aber nicht zwangsweise kostenlos.
Du kannst gerne mal google mit "C# ffmpeg" durchsuchen.
Gibt dann genug Links zum lesen
Nachtrag:
Dann schau dir das Beispiel an, dort ist dann klar was dort verwendet werden muss.
Oder du schaust einfach ob es für die Lib von ffmpeg einen passenden .NET Wrapper gibt und bindest diesen ein.
Dann kannst du direkt gegen die native Lib arbeiten und dein Programm direkt als Container verpacken.
Und im grunde liegt es auch auf der Hand bei einer stark typisierten Sprache wie C# wird ein Enum Wert auch als ein Enum Wert betrachtet.
Aber warum nimmst du nicht direkt die Enum Werte im dictionary als Key?
Dann kann kannst du das (Un-)Boxing aussparen.
@Abt
Kam falsch rüber, ich meinte mit der Aufnahme direkt die neuste Version in bereits veröffentlichte Versionen wie bei Debian
Dort wäre sowas eher die Ausnahme als gängige Praxis.
I.d.R. werden die meisten Distros es nicht mal aufnehmen, hängt aber von der jeweiligen Distribution ab.
Wenn man z.B. mit Debian arbeitet, dann bleibt die Version fix und nur die Patches für die jeweilige Version werden dafür bereitgestellt.
Wenn es aber eine Rolling Release Variante wur Gentoo ist, dann sollten diese nach und nach geliefert werden.
Muss man aber ggf. bei der jeweiligen Distribution nachfragen, kann man dir hier nicht für deine Variante beantworten.
@BerndFfm
Kleine Anmerkung zu der SortDevices Methode.
Das ref kann hier beim Parameter entfallen, da die Referenz auf die Liste nicht geändert wird also nicht überschrieben oder genullt wird.
Auch wenn die die Werte innerhalb der Liste änderst, brauchst du kein ref solange du die Instanz nicht überschreibst.
Hat weniger mit WPF zu tun als viel mehr mit dem Windows Verhalten.
Das kannst du auch einfach mit dem Taschenrechner nachstellen.
Einfach eine Nummer drücken und dann wird durch Leertaste auch der letzte Button erneut ausgelöst.
Ansonsten finde ich bei Google mit "WPF remove button focus" ein paar Treffer.
Z.B. folgendes klinkt erstmal brauchbar.
@Arti
Th69 hat dir schon den Grund genannt.
Du wirfst durch dein zusammen setzen der String Instanzen quasi mit monströsen String Instanzen um sich.
Damit setzt du sowohl CPU als auch RAM unter druck ebenfalls hat der GC dann ordentlich zu tun den Datenmüll wieder wegzuräumen.
Man merkt, dass dir die Grundlagen und das Verständis fehlt.
Daran solltest du arbeiten, ansonsten verweise ich nochmal auf die Antworen von Abt.
Nicht schätzen sondern messen!
Hast du dein Programm im Release Mode gebuildet oder einfach klassisch alles aus dem Debug Ordner genommen?
Der Compiler würde im Release vermutlich die leere Schleife schon wegoptimieren.
Kann man aber auch z.B. mit ILSpy und konsorten prüfen.
Der gesamte Code, den du aktuell laufen lässt, wäre aber nicht verkehrt.
Ggf. hast du noch andere Stellen die langsam sind iwe z.B. IO Aufgaben mit lesen/schreiben in Dateien.
Hast du mal die Taktraten der CPUs verglichen?
Dein i9 wird mehr Dampf haben als ein Xenon CPU weil das eine ein Dekstop mitmeistens hohen Takraten ist und letzteres eine Server CPU bei der weniger Task dafür aber mehr Kerne vorgesehen sind.
Bei Server CPU geht es mehr darum möglichst viele Anfragen gleichzeitig verarbeiten zu können.
Ansonsten wäre noch interessant was du eigentlich genau erreichen willst.
Eine Laufzeit von rund 1 Min. dürfte noch um einige Größen optimiert werden können.
Dazu müsste aber auch klar sein, was dein Ziel ist.
Wie sieht deine md5list den genau aus?
Wenn du nur einen String mit dem Hash hast, kannst du eigentlich mit HashSet<string> alle Dubletten eliminieren ohne großen Performance Aufwand.
Oder hast du hier noch andere Anforderungen?
Du solltest dich mit dem Thema Multithreading bzw. generell mit Threading beschäftigen.
Windows managed nur die Threads, kümmert sich aber nicht darum deine Software magisch auf alle Kerne zu verteilen.
Dies muss der Entwickler selbst mit Threads bzw. mit Tasks lösen.
Auf den ersten Blick wüsste ich nicht, wie man den Code per Threading/Tasks optimieren sollte.
Gerade der Vergleich von Listen muss zwangsweise auch durch einen Thread erledigt werden.
Nachtrag:
Anstelle von Listen wären ggf. HashSet zum ermitteln von eindeutigen Einträgen besser.
Ggf. lässt sich dein Problem also durch andere Datenstrukturen optimaler lösen als durch die Listen.
Nachtrag 2:
Try-Error ist übrigens kein guter Ansatz um programmieren zu lernen.
Lies dich mit guten Büchern ein oder mit Lernvideos.
Try-Error kann dir nicht die Grundlagen sauber vermitteln und ist auch keine optimale Problemlösung.
Besser ist es, wenn man die jeweilige Programmiersprache sauber lernt und dem Umgang auch durch einen Blick in die Doku lernt.
Wie sieht den dein aktueller Ansatz aus?
Der einfachste Ansatz wäre durchlaufen der Arrays und prüfen ob die jeweiligen Werte identisch sind.
Dafür brauchst du nur eine for Schleife.
Hierbei musst du aber beachten, dass die Arrays gleich groß sein müssen.
Wenn diese unterschiedlich groß sind, musst du dies noch beachten!