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 Palladin007
Thema: Paralleler always running Code am besten implementieren vom WPF Projekt.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Frage 1:
Ich nutze Threads nur dann, wenn ich viel Kontrolle brauche, aber möglichst nur dann, wenn es um Code geht, der wirklich lange unabhängig vom Rest laufen soll. Also ein komplett eigenständig im Hintergrund laufendes System, das dann aber auch klar und deutlich vom Rest abgekapselt ist.

Wenn Du sozusagen aus deiner UI heraus eine Aufgabe starten möchtest, die dann im Hintergrund läuft und die UI regelmäßig informiert, ist die mit Abstand einfachste Lösung der Task.
Vergiss dabei aber nicht, dass Du mit einem neuen Task (Run oder Factory) viele der Vereinfachungen nicht mehr nutzen kannst, um die Vorteile wirklich ausnutzen zu können, solltest Du also wissen, was Du tust, doch das gilt für alle drei Wege.
Wenn Du einen neuen Task haben willst, der lange läuft, dann vergiss nicht, den als LongRunning zu markieren, sonst blockierst Du einen ThreadPool-Thread.

Frage 2:
Wenn Du deine CPU maximal auslasten möchtest, ist vermutlich Parallel die beste Option, die teilt (wenn nicht anders eingestellt) genau auf die logischen Kerne auf, auch wenn es mehr Aufgaben sind, als Du Kerne hast.
Mit den Threads direkt kannst Du sogar genau definieren, auf welchem Kern der Thread laufen soll (ProcessorAffinity), aber ob das so sinnvoll ist - ich bezweifle es.
Mit den Tasks geht das vermutlich nicht - ich habe aber auch noch nie danach gesucht.
Du solltest dir lieber überlegen, was Du brauchst und ob Du wirklich deine CPU 100% auslasten musst/solltest, denn sowas wie eine Desktop-Anwendung bekommt dann auch Probleme

Frage 3:
Wie schon mehrfach gesagt sind Desktop-Anwendungen keine optimale Umgebung dafür.
Für dauerhaft laufenden Code solltest Du einen Dienst implementieren, das Desktop-Programm kommuniziert dann über eine geeignete Schnittstelle mit diesem Dienst.
Wenn es aber gewollt ist, dass die Aufgaben nur so lange laufen, wie die Desktop-Anwendung, dann kannst Du bedenkenlos WPF verwenden.

Thema: STAThreadAttribute beim ScrollViewer
Am im Forum: GUI: Windows-Forms

Generell bin ich mir nicht sicher, ob es so klug ist, ein Java-Programm 1-zu-1 nach .NET zu portieren.
So ähnlich, wie es auf den ersten Blick scheint, sind die Sprachen sich gar nicht, es gibt einige Details (z.B. Generics), wo sich die Sprachen sehr unterscheiden.
Im schlimmsten Fall baust Du dein .NET-Programm auf einer Annahme auf, die bei .NET einfach nicht zutrifft und hängst dann in der Luft und musst Workarounds finden, die sich früher oder später rächen werden. Oder umgekehrt, Du übersiehst ein Feature von .NET, was dir für ein Feature eine viel bessere Lösung bieten könnte.

Bei Projekten, die auch etwas länger "leben" sollen/müssen, kann es klüger sein, das Projekt vom Reißbrett neu zu entwerfen und nur gelegentlich beim Original zu spicken. Das setzt aber auch entsprechende Erfahrung mit C# und natürlich umfangreiche Kentnisse zu den Funktionen des Programms voraus. Traurigerweise ist Letzteres das häufigere Problem, zumindest nach meiner Erfahrung.

Thema: STAThreadAttribute beim ScrollViewer
Am im Forum: GUI: Windows-Forms

Einfach mal nach "STAThreadAttribute" suchen ...

https://docs.microsoft.com/en-us/dotnet/api/system.stathreadattribute?view=net-5.0
CA2232: Windows Forms-Einstiegspunkte mit STAThread markieren. - Visual Studio

Zitat
Apply this attribute to the entry point method (the Main() method in C# and Visual Basic). It has no effect on other methods.

using System; 
using  System.Windows.Forms;

namespace UsageLibrary
{
    public class MyForm: Form
    {
        public MyForm()
        {
            this.Text = "Hello World!";
        }
        
        // Satisfies rule: MarkWindowsFormsEntryPointsWithStaThread.
        [STAThread]
        public static void Main()
        {
            MyForm aform = new MyForm();
            Application.Run(aform);
        }
    }
}

Thema: Bewegungsrichtung der Maus feststellen
Am im Forum: Rund um die Programmierung

Ist 'ne Weile her, dass ich das gemacht habe, aber ich hatte es damit gemacht:
Hooks - Win32 apps

Du registrierst einen Hook für die Maus (SetWindowsHookEx) und trackst einfach die Maus-Position.
Position vorher und aktuell ergeben einen Vektor, ergo: Du hast die Richtung.

Ob das alles auch aufgerufen wird, wenn man am Rand angekommen ist, weiß ich nicht, aber Du könntest dir mit einem kleinen Trick behelfen.
Wenn Du am Rand angekommen bist, setzt Du die Maus einfach einen Pixel vom Rand weg.
Wie gut das funktioniert, weiß ich aber nicht, doch ein Versuch ist es sicher wert.

Thema: Weiterführendes Buch gesucht
Am im Forum: Buchempfehlungen

Naja, in der Softwareentwicklung gibt es nicht einfach nur "Aufgaben abarbeiten" und es gibt auch keine Lösung, die man vergleichen kann.
Es gibt ein Projekt mit Zielen und Anforderungen und ab dem Punkt bist Du gefragt und ab da gibt es endlos viele Wege.
Wie soll ein Buch sowas machen?

Thema: Weiterführendes Buch gesucht
Am im Forum: Buchempfehlungen

Beispiele sollten eigentlich in jedem halbwegs guten Buch sein.
Sehr umfangreich werden die allerdings nicht, da natürlich nur begrenzt viel Platz für eine umfangreiche Einleitung vorhanden ist.
Am besten Du sammelst eigene Erfahrungen (klassische Übungs-Projekte wie das Adressbuch) oder Du blätterst auf GitHub und versuchst zu verstehen, wie etwas funktioniert und warum das so gemacht wurde.

[FAQ] Wie finde ich den Einstieg in C#?
Da ist unter Anderem ein Buch von Andreas Kühnel verlinkt, das auch mein Einstieg war. Es gibt auch eine 2019-Version, kostet aber Geld, ist dann aber auch aktuell.
Anhand deiner Stichpunkte vermute ich, dass Du das noch nicht kennst, denn das geht sehr weit über grundlegende Sprach-Features hinaus.

Thema: Exception-ErrorCode-Mapping
Am im Forum: Rund um die Programmierung

Zitat
War eher eine Wiedergabe, welchen Eindruck im Allgemeinen ich von solchen Anforderungen hab ;-)
Den Eindruck habe ich auch und ich hasse es, wenn das Fehler-Handling auf Error-Codes basiert. Im "besten" Fall wird auch noch komplett ignoriert, dass trotzdem Exceptions auftreten können oder die werden generell gefangen und durch einen einzigen Fehler-Code ersetzt.
Deshalb habe ich da zugegeben etwas allergisch reagiert
Zitat
Wissen denn die Anforderungsgeber, dass es evtl. einfach mittlerweile bessere Alternativen gibt?

Der Kunde:
Vermutlich ja, deshalb gibt es ja das Projekt.

Der Chef:
Definitiv, ich habe es schon oft angesprochen, allerdings gibt's da noch ein paar andere Probleme, die sehr viel weiterreichen, als übliche Konzepte und technische Möglichkeiten.
Wenn dich das interessiert, kann ich es dir privat schreiben, hier möchte ich nicht.

Thema: Exception-ErrorCode-Mapping
Am im Forum: Rund um die Programmierung

Zitat
es ist ihnen nichts besseres eingefallen oder sie wollten einfach keine "de facto Standards" verwenden.
Naja, weniger die Verweigerung der Standards, als das Fehlen einer Idee, wie ich eine solche Anforderung umsetzen kann.
Ich habe also nicht vor, basierend auf den Codes irgendwelche Logik aufzubauen, aber wenn so ein Code gefordert wird, muss er geliefert werden.
Zitat
Die Exceptions des Frameworks gelten prinzipiell als Infrastruktur-Exceptions; insbesondere bei den Fehler-Code-Exceptions hast Du womöglich Logik-Exceptions - also eine andere Kategorie, die aus Architektursicht weiter oben ist und selbst implementiert werden sollten, sodass eine Eindeutigkeit erreicht werden kann.
Da liegt wohl mein Denkfehler, über Kategorien bei Exceptions habe ich bisher gar nicht nachgedacht.
Aber es stimmt, wenn ich Business-Logik hinter einer Abstraktionsschicht verberge, gehören Exceptions natürlich mit dazu.

Es sind zwar nicht immer "reine" Logik-Exceptions, aber die Fehler-Codes machen nur dann Sinn, wenn ich von dem Fehler weiß, ihn aber nicht vernünftig behandeln kann.
Dann macht es aber automatisch wieder Sinn, genau das zu trennen, dann könnte man z.B. auch den Schweregrad des Fehlers im Log daran ausrichten.
Blödsinnige Input-Daten sind ja streng genommen kein kritischer Fehler, sondern einfach nur blödsinnige Input-Daten und dann kann ich auch direkt ein paar zusätzliche Fehler-Informationen mitgeben, damit der Client sie auswerten kann.

Ob ich andere Dinge so umsetzen kann (z.B. AppInsights) ist fraglich, ich bin ja schon froh, wenn ich überhaupt DependencyInjection nutzen darf ...
Aber das ist mein Bier, an den schrägen Vorgaben kann ich hoffentlich noch einiges ändern.


Ich danke dir auf jeden Fall für deine ausführliche Antwort, mich hat's auf jeden Fall weiter gebraucht.

Thema: 2 Xml Dateien vergleichen und Unterschiede speichern
Am im Forum: Datentechnologien

Mit XPath würde ich die einzelnen Knoten identifizieren, das kann man sich auch relativ leicht selber aus einem XmlNode zusammen bauen.
Du gehst also Knoten für Knoten das eine XML durch, baust daraufhin den XPath zusammen und suchst damit den passenden Knoten im anderen XML.

Dabei solltest Du aber Auflistungen im Hinterkopf behalten und wie Du das jeweils dazu passende Gegenstück findest - dazu müsste es ja geeignete Werte geben, wenn es nicht der Index ist.
Hier könnte man eine Wert Index-XPath bestimmen, den baust Du dann als Bedingung im ersten XPath ein.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Noch zwei Kleinigkeiten:

Wenn ich ein Thema erstelle, wird scheinbar das Forum als ungelesen markiert - was unsinnig ist, da ich das Thema ja erstellt habe.

Wenn ich beim Erstellen eines Beitrags den Fokus in die TextBox für die Überschrift setze und TAB drücke, navigiert er durch die Toolbar-Buttons, erwartet hätte ich persönlich aber, dass er in die TextBox für die Nachricht springt.

Aber wie gesagt: Nur Kleinigkeiten.

Thema: Exception-ErrorCode-Mapping
Am im Forum: Rund um die Programmierung

Moin,

angenommen, Ihr habt einen Web-Dienst, der Fehler-Codes zurück liefern können soll, wenn etwas schief gegangen ist.
Diese Fehler-Codes sollen konkrete Fehlerquellen identifizieren können, sodass man auf dieser Basis z.B. eine Support-Liste anbieten kann.
Oder wir haben eine Web-API und definieren Fehler-Codes, anhand derer ein Client spezifisch reagieren kann, ohne dass Exception-Details raus gegeben werden müssen.

Wie würdet Ihr das umsetzen?
Einfach in jedem Request eine Reihe von catches und so jeden bekannten Fehler abfangen und um einen Fehler-Code ergänzen?
Oder würdet Ihr eigene Exception-Typen definieren und je Situation die Exceptions fangen und als InnerException weiter geben?

Mich stört dabei, dass...
... man relativ weit oben viele mögliche Exceptions kennen und abfangen können muss, nach einer Änderung im Detail muss man also auch bei diesen catches prüfen und hat Probleme, wenn mehrere Exception-Typen in unterschiedlichen Situationen unterschiedliche Fehler-Codes bedeuten können.
... man für alles Mögliche eigene Exception-Typen definieren muss und ein neues Catch in einer Methode das Exception-Handling der aufrufenden Methode kaputt machen kann, weil die einen anderen Exception-Typ erwartet.

Meine Idee war daher die, dass ganz zum Schluss alle Exceptions generisch (Exception-Typ) gefangen und anschließend der StackTrace abgesucht wird.
Je StackFrame bzw. MethodBase kann man dann mittels Attributen ein Exception-ErrorCode-Mapping aufbauen, das nur für diese Methode gilt.

Das heißt:
Wenn ich eine Methode implementiere, bemerke ich direkt, dass es einige mögliche Fehlerquellen gibt, die ich nicht behandeln kann. Soll einer dieser Fehler als Fehler-Code behandelt werden, kann ich als Attribut definieren, welcher Exception-Typ zu welchem Fehler-Code führen soll, ggf. mit ein paar zusätzlichen Bedingungen, z.B. InnerExceptions.
Wenn die Exception gefangen wird, findet mein System diese MethodBase und das Attribute und kann - wenn die Bedingungen erfüllt sind - den Fehler-Code zurück geben.

Und dann könnte man noch Features einbauen, wie z.B. ...
- die Möglichkeit, Mappings einer aufgerufenen Methode zu überschreiben oder nicht
- Suchen von Mappings in der Klasse oder Basis-Methode/Klasse
- Verschiedene Matching-Strategien (selber Typ, zuweisbar, etc.)

Im Code könnte es so aussehen:


[ErrorCode("ZB001", typeof(FileNotFoundException))]
[ErrorCode("ZB002", typeof(AggregateException), typeof(MyInnerException))]
public void DoWork()
{
    DoInnerWork();
}
private void DoInnerWork()
{
    DoSomethingWithExceptions();
}

Im Catch, wo der Fehler-Code gebraucht wird, sucht man den StackTrace ab, findet "DoWork", prüft, welcher der Mappings passt und nimmt ggf. den Fehler-Code.
Die Performance wird sicher keine Preise gewinnen, aber wenn eine Exception soweit ist, dass ein Fehler-Response geschrieben werden muss, stört das auch nicht mehr.
Mir persönlich gefällt, dass sich an der tatsächlichen Implementierung genau nichts ändert und man somit auch keine Seiteneffekte hat. Außerdem muss eine Methode sich einzig und allein um das kümmern, was sie selber aufruft.

Meine Frage ist jetzt: Was haltet Ihr davon?
Gibt es bessere Wege, so eine Anforderung umzusetzen?
Seht Ihr Probleme bei der Idee?

Beste Grüße

Thema: Single vs. Multi-Prozess Architektur bei DataFlow Anforderungen
Am im Forum: Rund um die Programmierung

JimStark, das Problem ist mMn. nicht deine Entscheidung an sich, sondern die Begründung, dass es angenehmer oder einfacher sein soll.

Wenn man sich etwas genauer mit solchen Architekturen beschäftigt (und ich bin lange nicht so weit wie Abt), wird klar, wo sich solche Projekte mittel- bis langfristig hin bewegen und was man sich zu Beginn für Felsen in den Weg gelegt hat, ohne es zu merken.
Ich will damit nicht sagen, dass das bei dir auch der Fall ist, sondern nur, dass so eine Entscheidung immer sehr gut begründet sein sollte.
Die langfristigen Folgen können groß werden, der zusätzliche Aufwand ist schon zu Beginn groß und kann noch größer werden, deshalb sollte vorher direkt klar sein: Es gibt keinen besseren bzw. einfacheren Weg, der die Anforderungen erfüllt.
Oft lohnt sich auch die Frage bei jeder einzelnen Anforderung: Brauche ich das wirklich? Geht das vielleicht auch anders?

Und zum Thema Übersicht:
Ich trenne gerne in Ordnern (nur in der Solution), darin in Projekten und dazwischen gibt's teilweise kleinere Projekte, die eine Art Contract darstellen.
Eine Assembly will mit einer Anderen kommunizieren, darf das aber nur über die entsprechenden Schnittstellen.
Auf diese Weise habe ich zwischen den wichtigen Teilen einer Anwendung eine klare Trennung, was es leichter macht, die Zusammenhänge zu begreifen oder die Arbeit auf mehrere Leute/Teams aufzuteilen, ohne die Nachteile einer Prozess-Trennung zu haben.
Eigene Assemblies braucht man dafür nicht zwingend, allerdings kann ich dadurch genauer definieren, wer was darf oder sieht.

Ob das nun ideal ist, sei mal dahin gestellt, aber der Overhead ist verglichen einer Multi-Process-Architektur sicher um einiges geringer

Thema: Single vs. Multi-Prozess Architektur bei DataFlow Anforderungen
Am im Forum: Rund um die Programmierung

Vielleicht reden wir auch aneinander vorbei.

Ich bin gedanklich gerade bei Microservices, die - richtig umgesetzt - noch einige Anforderungen mehr hat, die viele vergessen.
Oder wir reden hier von einer Client-Server-Architektur, die natürlich deutlich einfacher ist und tatsächlich in sehr vielen Projekten sinnvoll ist.

Thema: Single vs. Multi-Prozess Architektur bei DataFlow Anforderungen
Am im Forum: Rund um die Programmierung

Zitat
dass es Anfangs mehr Arbeit ist, ist klar
Und später ist es noch mehr Arbeit, als anfangs, weil dann die ganzen Probleme auffallen, die Du übersehen hast
Belies dich mal zu den ganzen Vor- und vorallem Nachteile der Microservices-Architektur, das klingt für mich ein wenig danach.


Aber ja, das hilft dem Fragesteller nicht weiter, das stimmt wohl.
Oder Abt macht ein neues Thema daraus.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Dann habe ich nichts gesagt

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Die Übersicht, über die gelesenen Unterforen wird ja korrekt aktualisiert, wenn man in ein Unterforum geht und darin dann die Themen liest.

Wenn man aber über den "Letzter Beitrag"-Link geht und anschließend mit dem Zurück-Button oder dem Forum-Link wieder zur Gesamt-Übersicht geht, wird der Gelesen-Status nicht aktualisiert - auch nicht nach dem Aktualisieren.

Ist das schon bekannt?

Thema: Best Practice Frage zu Exception Handling ASP.NET
Am im Forum: Grundlagen von C#

Zitat
Ich würde nur die Exceptions catchen, die in meinem Fall auftreten können und am Ende würde ich die allgemeinste Exception Klasse catchen.

Ich sehe das wie gfoidl - Exceptions catchen nur, wenn notwendig oder Du sie wirklich behandeln kannst.
Also wenn das Programm/der Thread abstürzen würde, der Click-EventHandler vom Button zuende ist, etc. - dann darfst Du generell fangen und ggf. loggen oder eine Fehlermeldung anzeigen. Ansonsten ist ein Catch nur sinnvoll, wenn Du über das Catch einen alternativen Ablauf steuern kannst, der genauso zum gültigen Ergebnis führt.

Es gäbe aber noch einen Fall:
Du wirfst im Catch die Exception weiter (nur "throw;" nicht "throw ex;"), das erlaubt dir vorher z.B. den Zustand aufzuräumen.
Kein "throw ex;" deshalb, weil dabei der StackTrace verloren geht, das würde die Exception wie eine neue Exception behandeln und das willst Du nicht.


Exceptions fangen und eigene Exceptions werfen kann sinnvoll sein, ist aber mit Vorsicht zu genießen - und dann solltest Du das Original möglichst als InnerException beibehalten.
Das kann z.B. sinnvoll sein, wenn Du mehrere Implementierungen einer Schnittstelle hast, die je Implementierung auch die gleichen Exceptions werfen muss, damit der Aufrufer die unterschiedlichen Exception-Typen nicht beachten muss.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Die Idee gefällt mir.

Wäre ja denkbar, dass der Text als Cookie für z.B. einen Tag gespeichert wird und sobald man erneut ein Thema erstellen möchte, wird der Text eingefügt.
Stürzt z.B. der PC ab, ist der Text nach einem Neustart nicht weg, stattdessen muss man nur den letzten Rest nach der letzten Aktualisierung neu schreiben.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Zitat von dannoe
Ich verwende dafür derzeit diese Übersicht: MyCSharp.de - Aktive Themen
Das kannte ich noch gar nicht

@Abt
Dann bin ich mal gespannt, wie's dann wird

Besten dank ^^

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Wie ist eigentlich der Stand mit den Icons auf der Gesamt-Übersicht der Unterforen?
Da ist nur das Ordner-Icon und ich suche immer nach dem "Heute-Datum" um neue Beiträge zu finden.
Das ist lästig

Ist das mit dem Punkt "Eine Ansicht nach aktuellsten Themen (im Bau)" gemeint?

Thema: EFCore Daten werden nicht in DB geschrieben
Am im Forum: Datentechnologien

Dein Link funktioniert nicht.

Und er meint z.B. das hier beschriebene Logging: Logging
Kurz: Ereignisse jeder Art irgendwo hin schreiben.

EFCore unterstützt einige Möglichkeiten zur Konfiguration vom Logging:

Überblick über Protokollierung und Abfangfunktionen: EF Core
Ich persönlich würde das Logging-Framework von Microsoft verwenden:
Verwenden von Microsoft. Extensions. Logging-EF Core
Das wird auch in ASP.NET Core verwendet und kann mit so jedem (mir bekannten) größeren Community-Logging-Framework zusammen arbeiten.

Und dann kann EFCore noch Warnungen und Fehler anders behandeln:
DbContextOptionsBuilder.ConfigureWarnings Method (Microsoft.EntityFrameworkCore)
Ob das für dich relevant ist, weiß ich nicht, aber man sollte es zumindest mal gesehen haben.

Thema: C# Code in dll umwandeln
Am im Forum: Grundlagen von C#

Zum Kompilieren nutzt Du am besten eine IDE wie VisualStudio oder VisualStudioCode.
Du kannst auch den Compiler direkt nutzen, auch dafür gibt's endlos viele Anleitungen online.

Das Ganze in Python zu nutzen, ist aber etwas Anderes, dazu hab ich das gefunden:
how-to-load-a-c-sharp-dll-in-python

Da steht etwas von IronPython, was eine .NET-Implementierung sein soll.
Wenn das also auch die .NET-Runtime nutzt, kann es ohne Probleme C#-DLLs nutzen, da beides in CIL kompiliert wird.
Alternativ gibt's Python.NET, was das ist und wo der Unterschied zu IronPython liegt, weiß ich nicht.
Wenn das beides keine Option ist, musst Du eine COM-Schnittstelle anbieten, das habe ich aber noch nie gemacht und weiß auch nicht, wie es geht.

Thema: Wie kann ich eine Klasse festlegen, der erst zur Laufzeit feststeht?
Am im Forum: Grundlagen von C#

Abt meint einen generellen Grundsatz, DateTimeOffset zu nutzen, da Du (fast) keinen Nachteil hast, aber den Vorteil, dass das DateTime überall auf der Welt gültig ist.
Und mit "fast" meine ich so Kleinigkeiten, wie das etwas komplexere Format von ToString(), aber dafür kann man auch ein eigenes Format mit geben.


Und Thema DateTime als String:

Warum??? Das macht genau keinen Sinn
Die Datenbank kann das auch von sich darstellen, ein EFCore kann das auch korrekt mappen.
Wenn Du das als String rum schiebst, baust Du dir nur Probleme ohne jeden Vorteil.


Und Thema "Gängelung" vom Anwender:
Ich finde, man sollte den Anwender so viel "gängeln" wie nur möglich, denn die neigen dazu, Dinge auszuprobieren und dabei ggf. Blödsinn zu schreiben.
Besser wäre natürlich eine TextBox, die beides kann: Text-Eingabe direkt auf gültiges Datum prüfen und das Geparste anzeigen oder ein Kalender-Ansicht zum Klicken. Das gibt es, meines Wissens aber nicht direkt von Microsoft, sondern nur über externe Frameworks.

Thema: Konsolenanwendung mit TCPListener läuf als Dienst nicht korrekt
Am im Forum: Netzwerktechnologien

Dein LINK hat keine URL hinterlegt.
Schau mal, ob Du das noch bearbeiten kannst, ansonsten muss das ein Admin machen.


Und dein DataProcessor macht einen Thread auf, wartet aber nicht auf dessen Beendigung.
Das aus einem Timer heraus halte ich für riskant, da solltest Du dir nochmal genau anschauen, ob die Threads sich wirklich so verhalten, wie Du das möchtest. VisualStudio bietet übrigens ein paar nützliche Features zum Beeinflussen der Threads in einer Debug-Session.


Ansonsten wäre die Exception-Message spannend.
Soweit ich mich erinnere, muss man Port und Pfad im Windows mit Admin-Rechten registrieren, damit man darauf horchen kann. Was der Installer genau tut, weiß ich nicht, damit hab ich bisher nie gearbeitet, aber wenn dein Dienst als User ohne Admin-Rechte startet und dann versucht, alles einzurichten, wird das vermutlich schief gehen.

Und ohne diese Registrierung, funktioniert das Horchen auf den Port nicht.
Ich weiß nicht, ob dabei auch eine SocketException raus kommt, die Message könnte Klarheit schaffen.

Du solltest dir aber auch ein sinnvolles Logging überlegen (selber bauen ist selten eine gute Idee) und den problematischen Aufruf auch ins Try legen und nicht davor.

Thema: Wie kann ich eine Klasse festlegen, der erst zur Laufzeit feststeht?
Am im Forum: Grundlagen von C#

Das Strategy-Pattern setzt doch voraus, dass Du schon irgendwelche Daten hast, mit denen Du dann auf verschiedene Weisen arbeiten kannst.

Und da liegt der Knackpunkt: Wie die zwei völlig verschiedenen Datensätze in Einem darstellen?

Thema: Wie kann ich eine Klasse festlegen, der erst zur Laufzeit feststeht?
Am im Forum: Grundlagen von C#

Diese Beispiel-Basisklasse enthält aber nur ein paar grundsätzliche Daten, die man für die meisten Daten so braucht: ID, diverse ForeignKeys und Zeitstempel.
Das eigentliche Problem mit den grundlegend verschiedenen Noten ist damit nicht gelöst, um mit Beidem umgehen zu können, müsste man trotzdem wieder casten.

Daher auch der Gedanke mit dem Interface, doch wie das aufgebaut ist, kann man ohne Details zur geforderten Funktionalität nicht sagen.

Und für die Daten selber würde ich vermutlich drei Spalten einführen:
- GradeType
- GradeValue
- GradeText

Mit der Aufstellung könnte man das dann auch wiederum in einer Klasse abdecken, die sich dann je GradeType anders verhält.
Aber auch da kann man nicht sagen, ob und wie sinnvoll das ist, ohne Details über die geforderten Funktionalitäten zu haben.

Wenn es einzig und allein ums Speichern der Daten geht, sodass man sie später anzeigen oder drucken kann:
Warum überhaupt die Trennung? Mach es als simplen Text, bei den "richtigen" Noten steht dann eben eine Zahl vor dem Text.

Damit meine ich:
Übertreibe es nicht mit der Detailtreue, damit machst Du dir schnell alles kaputt, obwohl Du das gar nicht so genau brauchst.
Überlege dir, was Du wirklich brauchst und dann, wie Du die benötigten Daten behandeln kann, nicht umgekehrt mit den Daten anfangen und dann die Funktionen überlegen.

Thema: Wie kann ich eine Klasse festlegen, der erst zur Laufzeit feststeht?
Am im Forum: Grundlagen von C#

Also kann es auch Bewertungen mit dem selben Notenwert, aber unterschiedlichem Notentext geben?
Wenn ja - ok, dann kann man Letzteres natürlich nicht weg lassen.

Zitat
Ich stelle fest, dass meine Überschrift geändert wurde !? Fände ich gut, wenn man da eine automatisierte Info per Mail bekäme

Sprich das doch mal hier an.
Aber erwarte keine super zügige Anpassung, das Forum ist gerade nagelneu entwickelt und die Kinderkrankheiten sind vermutlich erst mal wichtiger.
Außer das ist ein Fehler, aber das muss dann Abt beurteilen.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Könntest Du das meinen?

IP-Adresse und DKIM in E-Mail Neuer Login

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Ich hab oben nochmal was ergänzt - hatte ich ja angekündigt.

Diesen Beitrag kannst Du löschen, der dient nur als Info an dich, für alle, die später lesen, ist das irrelevant.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Zitat
Signaturen sind noch deaktivierbar (kommt)
Du meinst "nicht deaktivierbar"?

Ich hab ein paar Kleinigkeiten zum Editor bzw. dessen Vorschau:

Wenn man Zitat-Block (und ich glaub auch Fehler) verwendet, entspricht die Vorschau nicht ganz der tatsächlichen Darstellung. In der Vorschau ist über dem Block eine Leerzeile (wie erwartet), bei der tatsächlichen Darstellung aber nicht. Das scheint allerdings nicht immer oder nur am Anfang aufzutreten, bei meinem Test am Ende des Beitrags hat's funktioniert.
Im Anhang liegen entsprechende Bilder.


Außerdem wirkt der C#-Code-Block etwas merkwürdig, die "C# Code"-Zeile sollte da weg oder etwas näher zum Code-Block selber rücken.


Die Blöcke (egal was) werden immer mehrzeilig eingefügt.
Normal wäre das egal, wenn die Leerzeile vor dem Inhalt nicht dargestellt werden würde.
Im alten Forum wurden keine Zeilenumbrüche eingefügt, alternativ wird bei der Darstellung die Leerzeile entfernt.


Beim Bearbeiten werden mir gerade zwei Vorschau-Bereiche angezeigt.
Der Erste enthält die alte Nachricht, der Zweite die neu bearbeitete Nachricht.
Ist das gewollt? Ich finde es etwas irritierend.


PS:
Ich bin gerade im Firefox, im Chrome habe ich es nur oberflächlich getestet, sah aber genauso aus.