|
Microsoft .Net-Samples
|
Main-Form für diese Anwendung. More...
Public Member Functions | |
| frmDotNetSamples () | |
| Standard Constructor. | |
Protected Member Functions | |
| override void | Dispose (bool disposing) |
| Clean up any resources being used. | |
Private Member Functions | |
| void | FrmAsyncSamples_Load (object sender, EventArgs e) |
| Form-Load. | |
| void | FrmAsyncSamples_FormClosed (object sender, FormClosedEventArgs e) |
| Form-Close. | |
| void | FrmAsyncSamples_KeyDown (object sender, KeyEventArgs e) |
| Form Key-Down. | |
| void | tsA_Close_Click (object sender, EventArgs e) |
| tsA_Close | |
| async void | tsA_TaskRun_Sample001_Click (object sender, EventArgs e) |
| Menu: Task.Run Samples: Task.Run (001). | |
| async void | tsA_TaskRun_Sample002_Click (object sender, EventArgs e) |
| Menu: Task.Run Samples: Task.Run (002). | |
| void | tsA_TaskRun_Sample003_Click (object sender, EventArgs e) |
| Menu: Task.Run Samples: Task.Run (003). | |
| async void | tsA_TaskRun_Sample004_Click (object sender, EventArgs e) |
| Menu: Task.Run Samples: Task.Run (004). | |
| async void | tsA_TaskRun_Sample005_Click (object sender, EventArgs e) |
| Task.Run() und Task.Factory.StartNew() => Menu: Task.Run Samples: Task.Run (005). | |
| async void | tsA_TaskRun_Sample006_Click (object sender, EventArgs e) |
| Task.Run() mit Cancellation-Token => Menu: Task.Run Samples: Task.Run (006). | |
| Task | tsA_TaskRun_Sample006_Click_TaskWrapper (CancellationTokenSource _CancellationTokenSource, CancellationToken _CancellationToken) |
| Wrapper Task.Run() aus tsA_TaskRun_Sample006_Click(). | |
| async void | tsA_TaskRun_Sample007_Click (object sender, EventArgs e) |
| (1) Task.Run() Sample mit einem Cancellation-Token. | |
| Task | tsA_TaskRun_Sample007_Click_TaskWrapper (CancellationTokenSource _CancellationTokenSource, CancellationToken _CancellationToken) |
| (2) Implementiert (kapselt) die Ausführende Methode im Sample mit CancellationTokenSource und CancellationToken | |
| void | tsA_TaskRun_Sample007Cancel_Click (object sender, EventArgs e) |
| void | tsA_TaskFromResult_Sample001_Click (object sender, EventArgs e) |
| Menu: Task.FromResult Samples : Task.FromResult (001). | |
| async void | tsA_TaskFromResult_Sample002_Click (object sender, EventArgs e) |
| Menu: Task.FromResult Samples : Task.FromResult (002). | |
| async void | tsA_TaskFromResult_Sample003_Click (object sender, EventArgs e) |
| Menu: Task.FromResult Samples : Task.FromResult (003). | |
| void | tsA_Standard_Sample001_Click (object sender, EventArgs e) |
| Menu: Standard (SYNCH) : Standard (001). | |
| async void | tsAClassSampleDiversAwaitable001_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Diverse : AWAITABLE-001. | |
| async void | tsAClassSampleTask001Async001_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Task-001 : Async-001. | |
| async void | tsAClassSampleTask001Async002_Click (object sender, EventArgs e) |
| INF: 24.10.2024 => Aktuelle Frage nach Task.Run() vs Task.FactoryRun() [frmDotNetSamples:tsAClassSampleTask001Async002_Click()]. | |
| async void | tsAClassSampleTask001Async003_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Task-001 : Async-003. | |
| async void | tsAClassSampleTask001Async004_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Task-001 : Async-004. | |
| async void | tsAClassSampleTask001Async005_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Task-001 : Async-005. | |
| void | tsAClassSampleLambda001Lambda001_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Lambda-001 : Lambda-001 Function (FUNC) mit benannter Methode und eine Variante mit einem Lambda-Ausdruck. | |
| void | tsAClassSampleLambda001Lambda002_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Lambda-001 : Lambda-002 Implementierung von FUNC-Varianten. K�nnte so auch f�r Programm-Varianten anstelle eines Interface verwendet werden. | |
| void | tsAClassSampleLambda001Lambda003_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Lambda-001 : Lambda-003 Implementierung mit Action. Leider ist der delegate nur VOID Siehe auch SampleDelegateAction, kein Return. | |
| async void | tsAClassSampleLambda001Lambda004_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Lambda-001 : Lambda-004. | |
| void | tsAClassSampleSerializableSerializationInfo_Click (object sender, EventArgs e) |
| NEW: 23.01.2025 => NEW: TEST-Methode implementieren .Net DataContractSerializer NEW. | |
| void | tsAClassSampleSerializableJSONHelpInfo_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Serializable : Serialize JSON-File (Help-Info). | |
| void | tsAClassSampleSerializableJsonIgnoreAttribute_Click (object sender, EventArgs e) |
| Menu: Any Samples : Serializable .Net 8.0 Serialize: JsonIgnore-Attribute. | |
| void | tsAClassSampleSerializableFW481DataContractSerializer_Click (object sender, EventArgs e) |
| DataContract-Serializer aus .Net 8.0 / 9.0. | |
| void | tsAClassSampleSerializableJSONOptionNet90_Click (object sender, EventArgs e) |
| INC: 27.10.2025 [tsAClassSampleSerializableJSONOptionNet90_Click] => Aktueller ToDo => SampleJSONSerializeNet90. | |
| void | tsAClassSampleExceptionUserException001_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Exception : User-Exception 001. | |
| void | tsAClassSampleObjectManagerObjectManager001_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Object-Manager : Object-Manager 001. | |
| void | tsAClassDelegateDelegateFunc_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Delegate : Delegate Func. | |
| void | tsAClassDelegateDelegateAction_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Delegate : Delegate Action. | |
| async void | tsAClassDesignPattern001_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Design-Pattern : MyClassDesignPatternSample001. | |
| void | tsAClassDesignPattern002_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Design-Pattern : MyClassDesignPatternSample002. | |
| async void | tsAClassDesignPattern003_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Design-Pattern : MyClassDesignPatternSample003. | |
| async void | tsAClassDesignPattern004_Click (object sender, EventArgs e) |
| INF: 24.10.2024 => Design-Pattern für Awaitable [tsAClassDesignPattern004_Click()] [MyClassDesignPatternSample04]. | |
| void | tsAClassDependencyInjection001_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Dependency-Injection : Dependency-Injection-001. | |
| void | tsAClassInterface001_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Interface : Interface-001. | |
| void | tsAClassSingleton001_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Singelton : Singelton-001. | |
| void | tsAClassSampleTaskViewVOID_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Task-View : Class TaskView-VOID => Keine Implementierung HelperTaskView-Class (VOID). | |
| void | tsAClassSampleTaskViewSTRING_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Task-View : Class TaskView-STRING => Keine Implementierung HelperTaskView-Class (STRING). | |
| async void | tsAClassSampleTaskViewPERSON_Click (object sender, EventArgs e) |
| Menu: Any Samples : Class Task-View : Class TaskView-PERSON HelperTaskView-Class (PERSON) Die Logik sowie die Daten f�r die Class Person befindet sich in einer Methode! | |
| async void | tsAClassSampleParallelForEach001_Click (object sender, EventArgs e) |
| Vergleich Parallel-ForEach/Async/ForEach Vergleich bei Berechnung der Byte-Kapazitäten von einzelnen Dateien. | |
| async void | tsAClassSampleParallelForEach002_Click (object sender, EventArgs e) |
| SampleForEachParallel._RunningParallelMicrostepperv2000: Axis-Calculation f�r CNC. | |
| async void | tsAClassSampleParallelForEach003_Click (object sender, EventArgs e) |
| INC: 29.09.2025 [tsAClassSampleParallelForEach003_Click] => Aktueller ToDo => tsAClassSampleParallelForEach003_Click Vergleich Parallel-ForEach/Async/ForEach Vergleich beim Schreiben von Text-Dateien auf Disk. | |
| async void | tsAClassSamplePropertyCreateClass001_Click (object sender, EventArgs e) |
| Dynamic Create-Class. | |
| async void | tsAClassSampleThreadingStartThread001_Click (object sender, EventArgs e) |
| Verschiedene Varianten f�r Thread-Processe. | |
| void | tsAClassSampleThreadingStartThread002_Click (object sender, EventArgs e) |
| Startet eine UDP-Receive Session. Ausgabe an Debug anstelle Console. | |
| async void | tsAClassSampleReadControlgBoxL_Click (object sender, EventArgs e) |
| Class-Control: Wie können Werte aus einer Control-Class (Object:System.Windows.Forms.CheckBox) ausgelesen werden. | |
| void | tsAClassSampleSynchAsyncCall001_Click (object sender, EventArgs e) |
| Asynchrone Methode in Task gekapselt und ohne async und await. | |
| async void | tsAClassSampleSynchAsyncCall002_Click (object sender, EventArgs e) |
| Asynchrone Methode mit async und await. | |
| async void | tsAClassSampleSynchAsyncCall003Async_Click (object sender, EventArgs e) |
| SYNC-/ASYNC-Operations Class Synch / Async==>Call-003 ASYNC StreamReader()==>tsAClassSampleSynchAsyncCall003Async. | |
| void | tsAClassSampleSynchAsyncCall003Synch_Click (object sender, EventArgs e) |
| SYNC-Operations: Verschiedene Operation in Zusammenhang mit StreamReader-Klasse. | |
| async void | tsAClassSampleSynchAsyncCall004AsyncTaskMethode_Click (object sender, EventArgs e) |
| Ausführen einer normalen STATIC-BOOL Methode aus einer Klasse (sym.frm.net.Exxas_PowerBi) mit ASYNC-Muster. | |
| void | tsAClassSampleSynchAsyncCall005SynchMethodeAsyncRequest_Click (object sender, EventArgs e) |
| Ausführen async-Methode [HelperAsyncRESTRequest._HelperAsyncRequestExxas] in einer nicht asynch Umgebung / Methode. | |
| async void | tsAClassSampleSynchAsyncCall006SynchAsyncStreamWriter_Click (object sender, EventArgs e) |
| INC: 29.09.2025 [tsAClassSampleSynchAsyncCall003Async_Click] => Aktueller ToDo => tsAClassSampleSynchAsyncCall003Async_Click::cbOption09. | |
| void | tsAClassSampleExtensionSample001_Click (object sender, EventArgs e) |
| INF: 06.01.2025 => [SampleExtensionImplement::tsAClassSampleExtensionSample001_Click] Extension-Methodes und deren Implementierung. | |
| void | tsAClassSampleXMLOperationDynamicRead001_Click (object sender, EventArgs e) |
| INF: 09.01.2025 => [SampleDynamicXml::tsAClassSampleXMLOperationDynamicRead001_Click] Extension-Methodes und deren Implementierung. | |
| void | tsAClassSampleObsoleteAttributeObsoleteAttribute_Click (object sender, EventArgs e) |
| INF: 14.01.2025 => [SampleObsoleteAttribute::tsAClassSampleObsoleteAttributeObsoleteAttribute_Click] Obsolete-Attribute Objects tsAClassSampleObsoleteAttribute Diverses_ObsoleteAttribute. | |
| void | tsAClassSampleEnumConvert_Click (object sender, EventArgs e) |
| CHK: 16.09.2025 => No Display Ouput Enum-Convert / Konvertierung mit ENUM. | |
| void | tsAClassSampleEnumDictionaryFunctions_Click (object sender, EventArgs e) |
| Suchfunktionen mit ENUM und Dictionary sowie KeyValuePair-Methode. | |
| void | tsAClassSampleDataSetInsertRecordToDataSet_Click (object sender, EventArgs e) |
| Exxas-Client => Einlesen CSV-File (Preisliste Microsoft) und save in DataSet. | |
| void | tsAClassSampleDataDataOperation001_Click (object sender, EventArgs e) |
| IntelliCode und Autovervollständigung der Code-Zeilen. | |
| void | tsAClassSampleListWithNTupel_Click (object sender, EventArgs e) |
| Der Ganze Begriff in der Klammer (string _CustomerName, string _Scanserver) ist Generic <T>. | |
| void | tsAClassGenericaCheckGenericType_Click (object sender, EventArgs e) |
| void | tsACSharpVersionTokenEqGt_Click (object sender, EventArgs e) |
| C# Token und Varianten der Darstellung CHK: 11.03.2024 => SampleLambdaAusdruckBody._GetProgramName()-Methode Lambda und Ausdruckskörper. | |
| void | tsACSharpVersionOperatorTernaryConditional_Click (object sender, EventArgs e) |
| C# ternary conditional operator: Ternärer-Operator ?: [ (Ausdruck true/false) ? true-value : false-value. | |
| void | tsACSharpVersionOverrideMethode_Click (object sender, EventArgs e) |
| C# override methode. | |
| void | tsACSharpVersion_ZeichenfolgenliteraleUtf8_Click (object sender, EventArgs e) |
| VCS: 11.11.2024 => C#-11 => [ClassCSharp11::tsACSharpVersion11_ZeichenfolgenliteraleUtf8_Click] Aktuelle Position im Projekt. Auslesen Daten aus ReadonlySpan _FieldA INF: 04.03.2025 => Das ist aber ganz schön schräg!!!! =>pragma warning disable CS0108 in .editorconfig. | |
| void | tsACSharpVersion_ENUMType_Click (object sender, EventArgs e) |
| Menu: C# Versionen : C# Version-11 : ENUM. | |
| void | tsACSharpVersion_ParameterRefReadonly_Click (object sender, EventArgs e) |
| Menu: C# Versionen : C# Version-11 : Readonly VCS: 11.11.2024 => C#-11 => [ClassCSharp11::tsACSharpVersion11_Readonly_Click] Problem [readonly, ref, struct] etc.. | |
| void | tsACSharpVersion_TupelType_Click (object sender, EventArgs e) |
| VCS: 15.11.2024 => C#-12 => [ClassCSharp12::tsACSharpVersion_TupelType_Click] Tupel-Typen, List<(string _CustomerName, string _Scanserver)>. | |
| void | tsACSharpVersion_PrimaryConstructor_Click (object sender, EventArgs e) |
| VCS: 12.11.2024 [No Display-Output] => C#-12 => [ClassCSharp12::tsACSharpVersion_PrimaryConstructor_Click] primary constructor, base, this ... | |
| void | tsACSharpVersion_Interceptors_Click (object sender, EventArgs e) |
| VCS: 06.12.2024 => C#-12 => [ClassCSharp12::tsACSharpVersion_Interceptors_Click] Lauffähige Version: interceptors. | |
| void | tsACSharpVersion_ImplicitIndexerAccess_Click (object sender, EventArgs e) |
| C# Version: 13.0 / Net 9.0: Implicit Index Access im Array, class, struct und div. varianten zu generika. | |
| void | tsACSharpVersion_CSharp13_LINQ_Click (object sender, EventArgs e) |
| C# Version: 13.0 / Net 9.0: Diverse Varianten mit LINQ. | |
| void | tsACSharpVersion_CSharp13_ParamsCollections_Click (object sender, EventArgs e) |
| C# Version: 13.0 / Net 9.0: Verwenden Methode-Parameter als Collection, nicht einzeln. | |
| void | tsACSharpVersion_CSharp13_PartialClassMembers_Click (object sender, EventArgs e) |
| void | tsACSharpVersion_CSharp13_ThreadingLock_Click (object sender, EventArgs e) |
| C# Version: 13.0 / Net 9.0: Threading und neue lock-Varianten. | |
| async void | tsACSharpVersion_CSharp13_ThreadingLockASYNC_Click (object sender, EventArgs e) |
| Sammlung von Sample-Code zu. | |
| void | tsACSharpVersion_014_Default_Click (object sender, EventArgs e) |
| C# Version 14.0 / Net 10.0 ==> Siehe Notebook mit VS-2026. | |
| void | tsACSharpVersion_014_LambdaParameterMod_Click (object sender, EventArgs e) |
| void | tsARaspberryNet60RaspberrySystem_Click (object sender, EventArgs e) |
| CHK: 30.06.2025 => Implementierung Raspberry Processor Menu: Raspberry : Dot-Net 6.0 : Raspberry-System. | |
| void | tsAMicrosoftKISample001_Click (object sender, EventArgs e) |
| void | Dispose () |
| INF: 04.03.2025 => Das ist aber ganz schön schräg!!!! =>pragma warning disable CS0108 in .editorconfig. | |
| void | btnViewXmlDescription_Click (object sender, EventArgs e) |
| Anzeigen XML Description-File aus Project. Darin sind alle XML-Kommentare vorhanden. | |
| void | InitializeComponent () |
| Required method for Designer support - do not modify the contents of this method with the code editor. | |
Static Private Member Functions | |
| static string | ReceiveDatav2100 () |
| Methode zu tsAClassSampleThreadingStartThread002_Click. | |
Static Private Attributes | |
| static string | _GlobalReturnValue = string.Empty |
| static int | _GlobalValueCount = 0 |
Main-Form für diese Anwendung.
Version:
| 16.03.2026: frmDotNetSamples | Umstellung auf neue Version .Net SDK-10 C# 14. Auf neue SDK-Version und C#-Version umgestellt in den Projekt Eigenschaften. |
| 08.07.2025: frmDotNetSamples | Aktualisierte Version für den Einsatz mit Doxygen! Auch die App: D:\FHO_Tool\fho.frm.net.NetStudioSearchToDo musste entsprechend angepasst werden. In diesem Sample sind die zwingenden Angaben für Version und ToDo zu sehen. |
| 30.06.2025: frmDotNetSamples | In dieser Sample-Application werden permanent Neuerungen und/oder Erweiterungen aus der .Net C# Entwicklungs-Umgebung implementiert. Auch enthält diese Sample-Application viele Design-Muster zur Hilfe als Vorlage |
| 14.08.2024: frmDotNetSamples | HelperToolTippText: Aus dem App.-Startup-Pfad\tooltipptext werden *.txt Dateien eingelesen, wenn der Name der Datei dem Control-Namen entspricht. Dadurch können freie Zusatztexte zu den einzelnen Controls und deren Informationen aus der *.json ausgegeben werden. Implementierung Neuerungen zu Prject:fho.frm.net.NetStudioSearchToDo |
ToDo:
| dd.mm.yyyy frmDotNetSamples | Es können aktuelle ToDo erfasst werden. |
ReadMe:
| Neuerungen in Visual Studio 2022 | |
| Versionshinweise zu Visual Studio 2022 | |
| Task.Run Method | |
| Task<TResult> Class | |
| Task-based asynchronous programming | |
| Asynchrone Programmierung mit async und await | |
| Class Programm => Main() Methoden-Signaturen | |
| fho.frm.net.Microsoft_DotNetSamples.frmDotNetSamples.frmDotNetSamples | ( | ) |
Standard Constructor.
Suchen und Anzeigen der Assembly-Versionen
Configuration-File: App.config Extras => NuGet => Paketmanager => System.Configuration.ConfigurationManager
|
private |
Anzeigen XML Description-File aus Project. Darin sind alle XML-Kommentare vorhanden.
| sender | |
| e |
|
private |
INF: 04.03.2025 => Das ist aber ganz schön schräg!!!! =>pragma warning disable CS0108 in .editorconfig.
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Remarks:
In der FW-Version wird sogar eine Anmerkung ausgegeben, dass in der .editorconfig Datei eine DISABLE-Option aktiv ist.
[*.{cs,vb}] dotnet_diagnostic.IDE1006.severity = none dotnet_diagnostic.CS0108.severity = none
Dieser #error version pragma-Eintrag zeigt dann die aktuelle Compiler- und / Sprach-Verison in der Fehlermeldung
|
protected |
Clean up any resources being used.
| disposing | true if managed resources should be disposed; otherwise, false. |
|
private |
Form-Close.
| sender | |
| e |
|
private |
Form Key-Down.
| sender | |
| e |
|
private |
Form-Load.
| sender | this.Load |
| e | this.Load |
In dieser Form-Load Methode ist eine spez. Function implementiert, welche die Tool Tipp-Texte aus einem JSON-File einlesen und zuordnen kann.
Siehe Klasse: SampleReadControlToolStrip
Impl. Logik f�r App.config File
Sample zu NameValueCollection
Erstellen/Löschen menubase.txt File
Erstellen Tool-Tipp Text aus ASCII resp. JSON-File
Read ASCII-File (JSON)
Deserialize
Read ToolStrip-Control und setzen der Tool-Tip Beschreibung 18.02.2025 => Korrektur Read-Controls für Trennlinie
Achtung: Alles was an diesem Punkt an Tool-Tipp beschrieben wird, wird angezeigt weil es die letzte Aktion in diesem Bereich ist.
tsA_TaskFromResult_Sample001. tsA_TaskFromResult_Sample002.
|
private |
Required method for Designer support - do not modify the contents of this method with the code editor.
|
staticprivate |
Methode zu tsAClassSampleThreadingStartThread002_Click.
Bytes empfangen von: IP-ANY
Bytes mit der UTF8-Kodierung in das Textformat kodieren.
Output Screen
Splitt Received-Data
CMD
Send Status
|
private |
tsA_Close
| sender | |
| e |
|
private |
Menu: Standard (SYNCH) : Standard (001).
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleNormal
|
private |
Menu: Task.FromResult Samples : Task.FromResult (001).
Calculation Anzahl-Bytes aller Files in definierten Verzeichnissen. Bescheribung siehe ToolTipText
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTaskFromResult
|
private |
Menu: Task.FromResult Samples : Task.FromResult (002).
ASYNC Calculation Anzahl-Bytes aller Files in definierten Verzeichnissen. Bescheribung siehe ToolTipText
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTaskFromResult
|
private |
Menu: Task.FromResult Samples : Task.FromResult (003).
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Remarks: Es wurde eine Task.Run()-Methode mit AWAIT und einem Thread.Sleep(yyyy) implementiert
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTaskFromResult
|
private |
Menu: Task.Run Samples: Task.Run (001).
| sender | |
| e |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTaskRun
Optionen:
| Option-1: ASYNC | Klasse: fho.frm.net.Microsoft_DotNetSamples.ClassMethode.SampleTaskRun für verschiedene Methoden zum Thema awaitable Methode wird ausgeführt => fho.frm.net.Microsoft_DotNetSamples.ClassMethode.SampleTaskRun._GetAsyncStringAsReturn001() Der Dialog bleibt während der Ausführung offen, soweit also async und awaitable |
| Option-2: SYNCH | Task mit Lambda-Expression, kein async und/oder await. [Thread.Sleep(5000)] Die Task<TResult>-Klasse stellt einen einzelnen Vorgang dar, der einen Wert zurückgibt und in der Regel asynchron ausgeführt wird. Innerhalb des Task.Run() ist eine Lambda-Expression definiert mit Thread.Sleep(5000). Während der Ausführung bleibt der Dialog blockiert. |
| Option-3: ASYNCH | Definition: string _TaskOption03 = await Task.Run(): => Kein Task.Result nötig, da Result bereits in x (string) vorhanden. Die Lambda-Expression im Code-Bereich des Task wird sync ausgeführt. Methode wird async ausgeführt, und der Dialog bleibt offen. |
| Option-4: ASYNCH | Definition: Task<string> _TaskOption04 = Task.Run(): Ausführung: await _TaskOption04 und Auswertung-Result: [_TaskOption04.Result] => Lambda-Expression: sync Die Task<TResult>-Klasse stellt einen einzelnen Vorgang dar, der einen Wert zurückgibt und in der Regel asynchron ausgeführt wird. Innerhalb des Task.Run() ist eine Lambda-Expression definiert mit Thread.Sleep(5000). Help: https://learn.microsoft.com/de-de/dotnet/api/system.threading.tasks.task-1?view=net-9.0 |
| Option-5: ASYNCH | Definition: Task<string> _TaskOption05 = Task.Run<string>(async() => .....: Die Task<TResult>-Klasse stellt einen einzelnen Vorgang dar, der einen Wert zurückgibt und in der Regel asynchron ausgeführt wird. Innerhalb des Task.Run() ist eine async Lambda-Expression definiert mit await Task.Delay(5000). Help: https://learn.microsoft.com/de-de/dotnet/api/system.threading.tasks.task-1?view=net-9.0 |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Task.Run Samples: Task.Run (002).
| sender | |
| e |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTaskRun
Optionen:
| Option-1: | Ausführen awaitable Methode: _GetAsyncStringAsReturn002 Klasse: fho.frm.net.Microsoft_DotNetSamples.ClassMethode.SampleTaskRun Eine etwas andere Darstellung (Definition) als Option-1 bei tsA_TaskRun_Sample001_Click. Operator await wird direkt ausgeführt. Einfach eine etwas andere Darstellung (weniger Code). Am Ende aber eigentlich das selbe Result. Dialog bleibt offen während Ausführung! |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Task.Run Samples: Task.Run (003).
| sender | |
| e |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTaskRun
Optionen:
| Option-1: | Ausführen awaitable Methode: _GetAsyncStringAsReturn003 Klasse: fho.frm.net.Microsoft_DotNetSamples.ClassMethode.SampleTaskRun Achtung: Keine asynchrone Ausführung der Anwendung obwohl mit Task definiert. Ausgeführt wird die Methode _Methode001() aus dieser Klasse. Dabei wird ein Form geöffent und mit einem Thread.Sleep(5000) gewartet.Dabei bleibt allerdings der Dialog (Main blockiert). Die Methode Task.Wait() wartet bis alle Operationen beendent sind! _Task.Wait(CancellationToken.None) |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Task.Run Samples: Task.Run (004).
| sender | |
| e |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTaskRun
Optionen:
| Option-1: | _Methode001() nicht awaitable Klasse: fho.frm.net.Microsoft_DotNetSamples.ClassMethode.SampleTaskRun Methode wird async ausgeführt, da der Task.Run() als => await Taks.Run() definiert wurde. Zudem is die Methode tsA_TaskRun_Sample004_Click() als async deklariert. Der Dialog bleibt also offen! |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Task.Run() und Task.Factory.StartNew() => Menu: Task.Run Samples: Task.Run (005).
| sender | |
| e |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTaskRun
Cancellation-Token: https://learn.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-cancel-a-task-and-its-children
Die Problematik eines Cancellation-Tokens funktioniert in dieser Logik nicht. Es gibt nichts was in einem LOOP-Läuft, und in jeder Iteration prüft ob das Cancel-Ereignis eingetreten ist! In der Methode [tsA_TaskRun_Sample006_Click()] ist das Problem genau zu sehen!
Optionen:
| Option-1: | Definition: Task<string> _TaskRunningA = Task<string>(.... string _TaskRunningResultA = await _TaskRunningA; Klasse: fho.frm.net.Microsoft_DotNetSamples.ClassMethode.SampleTaskRun: Methode _Methode001() |
| Option-2: | Definition: string _TaskRunningResultB = await Task<string>(...... Klasse: fho.frm.net.Microsoft_DotNetSamples.ClassMethode.SampleTaskRun: Methode _Methode001() |
| Option-3: | Definition: string _ReturnFromTaskFactory = await Task.Factory.StartNew<string>(........ Klasse: fho.frm.net.Microsoft_DotNetSamples.ClassMethode.SampleTaskRun: Methode _Methode001() Grundsätzlich alles gleich, bis auf Task.Factory.StartNew(..... |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Task.Run() mit Cancellation-Token => Menu: Task.Run Samples: Task.Run (006).
| sender | |
| e |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTaskRun
Das Ganze basiert auf der Logik, dass eine Schlaufe immer wieder den Zustand [IsCancellationRequested] pr�ft. Nur dann kann der Cancel-Event auch ausgel�st werden.
https://learn.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-cancel-a-task-and-its-children https://learn.microsoft.com/de-de/dotnet/standard/parallel-programming/task-cancellation?source=recommendations
Optionen:
| Option-1: | Code Task in Option-1 implementiert Task direkt implementiert mit .Run und Lambda-Ausdruck |
| Option-2: | Code Task gekapselt in Wrapper:tsA_TaskRun_Sample006_Click_TaskWrapper() Task in einer externen Methode (Wrapper) gekapselt. |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Der Basis-Code der Methode:
|
private |
Wrapper Task.Run() aus tsA_TaskRun_Sample006_Click().
| _CancellationTokenSource | |
| _CancellationToken |
Prüft bei jedem Durchgang den Zustand des Cancellation-Token Wann ändert sich der Zustand des Token??
|
private |
(1) Task.Run() Sample mit einem Cancellation-Token.
| sender | |
| e |
Funktion Das Ganze basiert auf der Logik, dass eine Schleife (while) immer wieder den Zustand [IsCancellationRequested] prüft. Nur dann kann mittel der Eigenschaft [IsCancellationRequested=TRUE] ein Cancel-Event ausgelöst werden, und der Ganze Prozess beendet werden. Damit das Sample auch funktioniert, sind die Task.Run() Methode und das setzen der [IsCancellationRequested=TRUE] Eigenschaft auf 2 separate Menüpositionen gelegt worden.
|
private |
(2) Implementiert (kapselt) die Ausführende Methode im Sample mit CancellationTokenSource und CancellationToken
| _CancellationTokenSource | Instance von CancellationTokenSource |
| _CancellationToken | Instance von CancellationToken |
|
private |
(3) Der Cancel-Befehl! => Setzen der Eigenschaft [IsCancellationRequested=TRUE]
Erst nachdem das Ganze Microsoft-Sample auf 3-Methode ausgelagert wurde, können die einzelnen Elemente auch entsprechend angewendet und logisch nachvollzogen werden. Bleibt man beim Microsoft-Sample so wie in tsA_TaskRun_Sample006_Click() [siehe Option-1] beschrieben, macht das Ganze eingentlich keinen wirklichen Sinn!
| sender | |
| e |
|
private |
Menu: Any Samples : Class Delegate : Delegate Action.
Wie bei Action bereits festgestellt, es gibt keinen Return-Value! SampleLambdaExpression001._Lambda003
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Any Samples : Class Delegate : Delegate Func.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Any Samples : Class Dependency-Injection : Dependency-Injection-001.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Dependency-Injection
|
private |
Menu: Any Samples : Class Design-Pattern : MyClassDesignPatternSample001.
MyClassDesignPatternSample01 Soweit in Ordnung
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Macht doch soweit Sinn, und kann eingesetzt werden! Die einzelnen Methoden innerhalb _TaskRunSample001Async() werden SYNCH verarbeitet. Keine Parallele Ausf�hrung
MyClassDesignPatternSample01._TaskRunSample002_001()
MyClassDesignPatternSample01._TaskRunSample002_002_vXXXX()
v1.0.0.0 => nur SYNC v1.0.0.1 => ASYNC!!
|
private |
Menu: Any Samples : Class Design-Pattern : MyClassDesignPatternSample002.
KEINE IMPLEMENTIERUNG VORHANDEN. KLASSE MyClassDesignPatternSample02 DELETED!!
async entfernt.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Any Samples : Class Design-Pattern : MyClassDesignPatternSample003.
MyClassDesignPatternSample03 Diese Klasse ist OK, und kann als Desing-Vorlage verwendet werden.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
MyClassDesignPatternSample03._ExecuteFuncViewTaskDialog001Async()
MyClassDesignPatternSample03._ExecuteFuncViewTaskDialog002Async()
|
private |
INF: 24.10.2024 => Design-Pattern für Awaitable [tsAClassDesignPattern004_Click()] [MyClassDesignPatternSample04].
Menu: Any Samples : Class Design-Pattern : MyClassDesignPatternSample004 ==> Diese Klasse ist OK, und kann als Desing-Vorlage verwendet werden.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Siehe auch Class: MyClassDesignPatternSample04 (AnyClass Design-Pattern 004)
Geht der Frage nach, kann eine Standard-Methode [_MakeAwaitableMainTaskProcess()] zu Awaitable/Asynchrone gemacht werden?
Die Antwort ist JA => es braucht einfach mehr als nur eine Task-Methode im Design!
Dieses Design-Muster könnte beim Umbau des FW 4.8 auf .Net-8.0 DataBase-Tool eingesetzt werden.
Option-1 START
Option-2 CANCELLATION
|
private |
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Gibt Fehler, da diese Methode einen Constraint [class] (Einschränkung) hat
|
private |
Menu: Any Samples : Class Interface : Interface-001.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Dependency-Injection
|
private |
IntelliCode und Autovervollständigung der Code-Zeilen.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Zu beachten sind die Einstellungen im Visual-Studio:
Bereich: IntelliCode => Automatically generated code completitions in Editor
Dieser Bereich wurde angelegt nach dem Update auf 17.14.7! Ab dann war eine komische und wirklich nervige Code-Vervollständigung aktiv! Es gab wirklich erschrekende Code Vorschläge, einfach nur Schrottig!!
Instance => List<DataRow> _huhu = new List<DataRow>()
DataSet / DataTable
|
private |
Exxas-Client => Einlesen CSV-File (Preisliste Microsoft) und save in DataSet.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Siehe zu diesem Thema auch die ganzen Base-Classes!
Ab diesem Punkt beginnt die Methode:
1.
2.
=> Erstelle Sample-Record der Class SampleCSVAddressData. Ist die gleiche Basis-Klasse wie für den Import der externen CSV-Daten.
Datensatz einfügen in DataSet
Definition der externen CSV-Datei
Externe CSV-Datei einlesen in Class DataModel: List<SampleCSVAddressData>
Datensätze aus DataModel in DataSet übetragen
Definition der externen CSV-Datei
Externe CSV-Datei einlesen in Class DataModel: List<SampleCSVAddressData>
Datensätze aus DataModel in DataSet übetragen
Definition der externen CSV-Datei
Externe CSV-Datei einlesen in Class DataModel: List<SampleCSVAddressData>
Datensätze aus DataModel in DataSet übetragen
Ausgabe der Datensätze aus DataSet in Dialog
|
private |
Menu: Any Samples : Class Diverse : AWAITABLE-001.
Keine dieser Klassen / Varianten sind ASYNCHRON und/oder erlauben eine solche Verarbeitung. Es wird gezeigt (versucht) eine als AWAITABLE zu implementieren. Habe das mit dem ASYNC nochmals geprüft (24.10.2024)m Option-1 mit Thread-Sleep im GetResult() blockiert das Dialog, und ist nicht ASYNC!
Macht eigentlich keinen wirklichen Sinn!
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Ausf�hren der Methode GetAwaiter() aus der Class::MyObject => await zwingt Methode GetAwaiter() zur Ausf�hrung und �ffnet frmTaskView-Dialog (kein ASYNC) und keine Daten im TextFeld
Ausf�hren einer static Methode aus der Class::MyObject await bezieht sich in diesem Sample auf Task.Run(), und nicht auf die GetAwaiterStatic()-Methode (keine awaitable Funktion). Durch diese Implementierung ist es scheissegal was in MyObject-Class implementiert ist! Dialog => frmTaskView-Dialog wir nie ausgef�hrt!
Darstellung eigentlich nicht als Lambda-Audruck
Implementierung mit MyAwaiter-Class Die Klasse MyAwaiter implementiert alles was es f�r eine awaitable Klasse braucht. Es kann aber in dieser Form keine ASYNC Verarbeitung gestartet werden. Dialog, alles bleibt gesperrt, denn wir sind immer noch im gleichen Thread!
Implementierung mit MyAwaiter-Class Es ist so wie es geschrieben wird! Ein awaitable-class ist nicht ASYNC zu verwenden! Gem�ss diesem Sample ist die ganze Logik zum ASYNC in diesem Code-Abschnitt.
Achtung: Diese Ganze MyAwaiter-Klassen Logik bringt irgendwie einfach nicht wirklich etwas!
SYNC: Variante: 3.1 GetResult()
ASYNC: Variante: 3.2 GetResult() Achtung: Eigenschaft [.Result] ist nur bei Task verwendbar
SYNC: Variante: 3.1 GetResult()
Gruppe-1: MyClassAnySynchAndAsync01 https://learn.microsoft.com/de-de/dotnet/csharp/asynchronous-programming/async-return-types
ASYNC: Ausf�hrung Methode ist ASYNC
SYNCH: Dialog ist blockiert
SYNCH: Dialog ist blockiert
Gruppe-2: MyClassAnySynchAndAsync02 https://learn.microsoft.com/de-de/dotnet/csharp/asynchronous-programming/async-return-types
Design: (async () => ASYNC: Ausf�hrung Methode ist ASYNC
Wird als ASYNCH ausgef�hrt, kein Blockade beim Dialog
Design: (async () => Wird als ASYNCH ausgef�hrt, kein Blockade beim Dialog
|
private |
CHK: 16.09.2025 => No Display Ouput Enum-Convert / Konvertierung mit ENUM.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Auslesen Elemente Framework-Versionen
|
private |
Suchfunktionen mit ENUM und Dictionary sowie KeyValuePair-Methode.
| sender | |
| e |
Optionen:
| Option-1: | Search Pin-Name (GpioConnector) from Pin-Name String Search Pin-Name (GpioConnector) from Pin-Name String KeyValuePair<GpioConnector, string> _KeyValuePairPinName = SampleEnumOperations._GpioConnectorSearchPinName("GPIO_02_P1Pin3_SDA") |
| Option-2: | Prüfen ob der gesuchte Connector-Pin bereits in der Dispose-Liste vorhanden ist Prüfen ob der gesuchte Connector-Pin bereits in der Dispose-Liste vorhanden ist bool _IsKeyInData = SampleEnumOperations._GpioConnectorCheckKey(3) |
| Option-3: | Suchen GpioConnection in Dictionary mit Key-Number Suchen GpioConnection in Dictionary mit Key-Number KeyValuePair>Int32, GpioConnector< _KeyValuePairPinName = SampleEnumOperations._GpioConnectorSearchKey(17) |
| Option-4: | Suchen Pin-Nummer des GpioConector mit dem ENUM-Bezeichner Suchen Pin-Nummer des GpioConector mit dem ENUM-Bezeichner Int32 _ConnectorPinNumber = SampleEnumOperations._GpioConnectorSearchNumber(GpioConnector.GPIO_19_P1Pin35_PCM_FS) |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Any Samples : Class Exception : User-Exception 001.
Erstellen eigener Exceptions
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
INF: 06.01.2025 => [SampleExtensionImplement::tsAClassSampleExtensionSample001_Click] Extension-Methodes und deren Implementierung.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Any Samples : Class Lambda-001 : Lambda-001 Function (FUNC) mit benannter Methode und eine Variante mit einem Lambda-Ausdruck.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleLambdaExpression001
|
private |
Menu: Any Samples : Class Lambda-001 : Lambda-002 Implementierung von FUNC-Varianten. K�nnte so auch f�r Programm-Varianten anstelle eines Interface verwendet werden.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleLambdaExpression001
|
private |
Menu: Any Samples : Class Lambda-001 : Lambda-003 Implementierung mit Action. Leider ist der delegate nur VOID Siehe auch SampleDelegateAction, kein Return.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleLambdaExpression001
|
private |
Menu: Any Samples : Class Lambda-001 : Lambda-004.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleLambdaExpression001
Nicht ASYNC, normale Verarbeitung
ASYNC Verarbeitung
ASYNC Verarbeitung
Nicht ASYNC Verarbeitung Direkte Ausf�hrung der _SearchMemberOfPersonLambda()-Methode. In diesem Falle also keine ASYNC-Ausf�hrung
|
private |
Der Ganze Begriff in der Klammer (string _CustomerName, string _Scanserver) ist Generic <T>.
| sender | |
| e |
Optionen:
| Option-1: | List<(string _CustomerName, string _Scanserver)> |
| Option-2: | SortedList<string, string> |
| Option-3: | List<Tuple<string, string>> |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Liste mit Daten befüllen Ausgabe und Anzeigen der Daten.Der Ganze Begriff in der Klammer ist Generic <T>
Liste mit Daten befüllen
Liste mit Daten befüllen
|
private |
Menu: Any Samples : Class Object-Manager : Object-Manager 001.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Implementiert ISerializable-Interface nicht!
Implementiert ISerializable-Interface! aber gibt Fehler bei [mgr.RegisterObject(_TestClassB, 199, si);]
|
private |
INF: 14.01.2025 => [SampleObsoleteAttribute::tsAClassSampleObsoleteAttributeObsoleteAttribute_Click] Obsolete-Attribute Objects tsAClassSampleObsoleteAttribute Diverses_ObsoleteAttribute.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
https://learn.microsoft.com/de-de/dotnet/api/system.obsoleteattribute?view=net-8.0
Auslesen Elemente Framework-Versionen
|
private |
Vergleich Parallel-ForEach/Async/ForEach Vergleich bei Berechnung der Byte-Kapazitäten von einzelnen Dateien.
| sender | |
| e |
Optionen:
| Option-1:_RunningParallel1001() | Methode: async Task await Task.Run() mit einer Parallel.ForEach Schleife mit Stream-Writer zum Berechnen der Byte-Kapazität aller selektierter Dateien |
| Option-2:_RunningParallel1002() | Methode: Task Parallel.ForEach Schleife mit Stream-Writer zum Berechnen der Byte-Kapazität aller selektierter Dateien |
| Option-3:_RunningParallel2001() | async Task await Task.Run() mit einer Parallel.ForEach Schleife mit Stream-Writer zum Berechnen der Byte-Kapazität aller selektierter Dateien |
| Option-4:_RunningParallel3001() | async Task await Task.Run() mit einer einfachen foreach-Schleife mit Stream-Writer zum Berechnen der Byte-Kapazität aller selektierter Dateien |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Info / todo:
| Caching | Das hat mit dem Problem des Caching wohl nichts zu tun. Denke, dass das eine Eigenschaft der SSD und deren Logik ist. Link: https://learn.microsoft.com/de-de/dotnet/standard/garbage-collection/fundamentals |
| Namespace | fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: MyClassForEachParallel |
Informationen im Code
|
private |
SampleForEachParallel._RunningParallelMicrostepperv2000: Axis-Calculation f�r CNC.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Calculation Wait-Time for X-Axis and Y-Axis
|
private |
INC: 29.09.2025 [tsAClassSampleParallelForEach003_Click] => Aktueller ToDo => tsAClassSampleParallelForEach003_Click Vergleich Parallel-ForEach/Async/ForEach Vergleich beim Schreiben von Text-Dateien auf Disk.
| sender | |
| e |
Optionen:
| Option-1: | Methode:async Task:_RunningParallel1001() await Task.Run() mit einer Parallel.ForEach Schleife mit Stream-Writer zum Schreiben Text-Dateien. |
| Option-2: | Methode:Task:_RunningParallel1002() Parallel.ForEach Schleife mit Stream-Writer zum Schreiben Text-Dateien. |
| Option-3: | async Task:_RunningParallel2001() await Task.Run() mit einer Parallel.ForEach Schleife mit Stream-Writer zum Schreiben Text-Dateien. |
| Option-4: | async Task:_RunningParallel3001() await Task.Run() mit einer foreach-Schleife mit Stream-Writer zum Schreiben Text-Dateien. |
| Option-5: | async Task:_RunningParallel4001() Eine foreach-Schleife mit await Task.Run() p/FileInfo mit Stream-Writer zum Schreiben Text-Dateien. |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Dynamic Create-Class.
INC: 05.02.2026 [tsAClassSamplePropertyCreateClass001_Click] => CreateClassDynamic._CreatePropertyClassCustomAttributeBuilderMicrosoft()=>Das passt alles noch nicht ganz!!!!
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Angewendet im Projekt: D:\symTool\sym.frm.net.Tool_CreateSqlCode
Class-Builder und Property
v1.0.0.0
v2.0.0.0
Class / Custom-Attribute
Class / Custom-Attribute => Microsoft-Sample
Assembly-Builder mit Ausführung einer Methode
Property-Builder: Abhängig vom Assembly-Builder kann dann der Propert-Builder eingesetzt werden
Microsoft-Sample DynamicObject
Implementierungen mit using und einer vorhandenen DLL. Also grundsätzlich nichts dynamisches!
Implementierungen mit using und einer vorhandenen DLL. Also grundsätzlich nichts dynamisches!
|
private |
Class-Control: Wie können Werte aus einer Control-Class (Object:System.Windows.Forms.CheckBox) ausgelesen werden.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
| cbOption01.Checked | [tsAClassSampleReadControlgBoxL_Click()] Ausführung der Task-Run() Methode erst nach xxx.Result Beinhaltet eine lokale implementierung zum Durchsuchen von Controls nach Typen wie: System.Windows.Forms.RadioButton etc. Durch diese Art des Codes innerhalb der Task-Run Methode wird dieser Code nur ausgeführt, nachdem die Eigenschaft _TaskReadControl.Result aktiviert wurde. Daher bleibt der Bildschirm für die Laufzeit auch blokiert. |
| cbOption02.Checked | Grundsätzlich analoge implementierung der foreach Logik ais Option-1. Unterschied ist der await Operator bei Task.Run(). Mithilfe des await Operators kann diese Version ASYNC ausgeführt werden, also bleibt der Bildschirm offen. Dadurch auch keine Verwendung der Eigenschatf .Result. |
| cbOption03.Checked | Eine externe Methode aus SampleReadControl._ReadControl() übernimmt die Aufgabe Control Read-Logik. Würde die externe Methode ohne await Task.Run() async ausgeführt, wäre die Methode nicht ASYNC. Nur durch den Einsatz eines zusätzlich Task.Run() mit await und async kann diese Methode als ganzes ASYNC ausgeführt werden. |
SYNCH
ASYNC
ASYNC: Ausführen Methode SampleReadControl._ReadControl() mit await Task.Run jetzt ASYNC
|
private |
DataContract-Serializer aus .Net 8.0 / 9.0.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Remarks:
1. Allgemein Verwenden Sie die DataContractSerializer Klasse zum Serialisieren und Deserialisieren von Instanzen eines Typs in einen XML-Datenstrom oder -Dokument. Sie können z. B. einen Typ Person mit Eigenschaften erstellen, die wesentliche Daten enthalten, z. B. einen Namen und eine Adresse https://learn.microsoft.com/de-de/dotnet/fundamentals/runtime-libraries/system-runtime-serialization-datacontractserializer
2. Problematik: NetDataContractSerializer Das Grundproblem an diesem Punkt ist, dass das Ganze Sample-Project mit aktuell .Net 9.0 erstellt ist (15.09.2025). Das Sample aus [https://learn.microsoft.com/de-de/dotnet/api/system.runtime.serialization.netdatacontractserializer?view=netframework-4.8.1] kann in diesem Projekt nicht implementiert werden! In der aktuellen Version ist der Name der Data-Contract Serializer Klasse => DataContractSerializer(). Besagte Klasse gemäss Beschreibung FW: 4.8.1 ist [NetDataContractSerializer], und ist in .Net 8.0 / 9.0 nicht verfügbar.
3. Option-1: DataContractSerializer Serialisierung einzel Object / Instance. In diesem Sample gibt es nur ein einzelnes Object welches serialisiert wird.
4. Option-2: DataContractSerializer-List Serialisierung n: Object / Instance. Das Sample aus der Option-2 enthält ein List-Object dieser Klasse, also n: Object in der Klasse
Hilfe im Source-Code:
|
private |
Menu: Any Samples : Class Serializable : Serialize JSON-File (Help-Info).
Internal-Function zum Erstellen / Einlesen einer JSON-Datei für die Menu ToolTipp-Texte
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Any Samples : Serializable .Net 8.0 Serialize: JsonIgnore-Attribute.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
1. Das reflektionsbasierte Serialisierungsmodul „System.Text.Json“ hat zuvor einen Lazy Loading-Ansatz verwendet, um Eigenschaftsmetadaten aufzulösen. Dieser Ansatz ermöglichte es POCOs, die nicht unterstützte Eigenschaftstypen enthalten, erfolgreich zu deserialisieren, vorausgesetzt, dass der zugrunde liegende JSON nicht an nicht unterstützte Eigenschaften gebunden wurde. (Dies geschah trotz der Tatsache, dass Instanzen desselben Typs nicht serialisiert werden konnten.)
2. Ab .NET 8 wurde das Serialisierungsmodul geändert, sodass alle Eigenschaften sowohl bei der Serialisierung als auch bei der Deserialisierung aufgelöst werden. Diese Änderung wurde vorgenommen, um eine bessere Unterstützung für die Kombination mehrerer Resolver hinzuzufügen, was eine frühzeitige Analyse des serialisierten Typdiagramms erfordert. Eine Begleiterscheinung dieser Änderung besteht darin, dass bei einer Abhängigkeit vom vorherigen Verhalten neue Deserialisierungsfehler zur Runtime angezeigt werden können.
3. Ab .NET 8 löst der gleiche Code wie im Abschnitt Vorheriges Verhalten eine InvalidOperationException aus.
4. System.InvalidOperationException: Der Typ „System.ReadOnlySpan'1[System.Byte]“ der Eigenschaft „Span“ des Typs „NestedValue“ ist für die Serialisierung oder Deserialisierung ungültig, da es sich um einen Zeigertyp oder eine Verweisstruktur handelt oder er generische Parameter enthält, die nicht durch bestimmte Typen ersetzt wurden.
5. Dieser Fehler entspricht dem Fehler, der auch in früheren Versionen ausgelöst wurde, wenn Sie versucht haben, eine Instanz desselben Typs zu serialisieren. Er entspricht auch dem Quellgenerator, was zu einem Kompilierzeitfehler führt.
| Scheisse | oberscheisse |
|
private |
INC: 27.10.2025 [tsAClassSampleSerializableJSONOptionNet90_Click] => Aktueller ToDo => SampleJSONSerializeNet90.
JSON-Serializer aus .Net 9.0, verschiedene Funktionen und Optionen
In dieser Version gibt es für die JSON-Serialisierung neue Funktionen / Methoden und Einstellunge rep. Optionen wie JsonSerializerOptions für eine möglichs optimale Serialisierung.
CHK: 13.08.2025 => JSON-Serialize Option .Net 9.0
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Remarks:
https://learn.microsoft.com/de-de/dotnet/core/whats-new/dotnet-9/overview
| cbOption01.Checked _GetJSONSerializedString
| JsonSerializer mit JsonSerializerOptions |
| cbOption02.Checked _GetJSONSerializedStringWebOptimized
| JsonSerializer mit Darstellung WEB (Camel-Case) |
| cbOption03.Checked _GetJSONSerializedStringWebOptimized
| JsonSerializer mit JsonSerializerOptions und JsonNamingPolicy |
| cbOption04.Checked _GetJSONSerializedStringWebOptimizedOption04
| JsonSerializer mit JsonSerializerOptions, async mit Lamdba-Audruck |
| cbOption05.Checked _GetJSONSerializedStringWebOptimizedvOption05Async
| ASYNC JsonSerializer mit JsonSerializerOptions |
| cbOption06.Checked _GetJSONSerializedStringWebOptimizedvOption06Async
| ASYNC JsonSerializer mit JsonSerializerOptions |
Option-1:
|
private |
NEW: 23.01.2025 => NEW: TEST-Methode implementieren .Net DataContractSerializer NEW.
Menu: Any Samples : Serializable : SerializationInfo
Nimm die Symotech Base-Klassen f�r die Serialisierung!
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Asynchrone Methode in Task gekapselt und ohne async und await.
| sender | |
| e |
Optionen:
| Option-1: | SampleSynchAsync._CallAsyncMethodeWithoutAwait(): Ziel war es eine ASYNC-Methode (HTTP-Request) aus einer normalen Methode ohne ASYNC (und await) in der Signatur auszuführen. Der entscheidende Teil der Methode _TaskCallMethode wird ohne AWAIT einfach nur SYNCH ausgeführt, muss mit Task.Result zur Ausführung gebracht werden. [tsAClassSampleSynchAsyncCall001_Click()] Ausführung der Task-Run() Methode erst nach xxx.Result. Diese Methode kann, muss nicht mit async deklariert sein. |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Asynchrone Methode mit async und await.
| sender | |
| e |
Optionen:
| Option-1: 01.09.2025 | (HTTP-Request) Asynchrone Methode mit async und await Die Methode mit dem HTTP-Request ist in einer ASYNC-Methode und wird aus einer ASYNC-Methode (Signatur) ausgeführt. Der Dialog bleibt während der ganze Zeit offen, und ist nocht blockiert. |
| Option-2: 29.09.2025 | SampleSynchAsync._CallAsyncMethodeWithoutAwait(): (HTTP-Request) SYNCH-Methode in Task.Run() mit async und await (Lambda-Expression). Die Methode mit dem HTTP-Request ist in einer SYNCH-Methode => SampleSynchAsync._CallAsyncMethodeWithoutAwait() analog tsAClassSampleSynchAsyncCall001_Click(). Durch die Verwendung von Task.Run() async und await, wird diese Methode aber dennoch ASYNC ausgeführt. In dem Lambda-Ausdruck wird eine Warnung ausgegeben, da es keine awaitable Methode gibt. Ist aber kein Problem, und nur eine Warnung, mit einer await Task.Delay(1) Anweisung ist auch dieses Problem gelöst! Der Dialog bleibt während der ganze Zeit offen, und ist nicht blockiert. |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
SYNC-/ASYNC-Operations Class Synch / Async==>Call-003 ASYNC StreamReader()==>tsAClassSampleSynchAsyncCall003Async.
| sender | |
| e |
Links:
| AWAIT versus RESULT | Die Result-Eigenschaft ist eine blockierende Eigenschaft. Wenn Sie versuchen, darauf zuzugreifen, bevor die Aufgabe abgeschlossen ist, wird der aktuelle aktive Thread blockiert, bis die Aufgabe abgeschlossen ist und der Wert verfügbar ist. In den meisten Fällen sollten Sie auf den Wert zugreifen, indem Sie „await“ verwenden, anstatt direkt auf die Eigenschaft .Result zuzugreifen. https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/operators/await |
| Asynchrone Programmierung mit async und await | Task asynchronius programming model TAP: Diese Microsoft-Beschreibung ist nur in englischer Sprache verfügbar. Es geht um: https://learn.microsoft.com/de-de/dotnet/csharp/asynchronous-programming/ |
| Aufgabenbasiertes asynchrones Muster (TAP) in .NET: Einführung und Übersich | Task asynchronius programming model TAP: Das aufgabenbasierte asynchrone Muster ist in .NET das empfohlene Entwurfsmuster für neue Entwicklungen. Es basiert auf den Typen Task und Task:TResult: im System.Threading.Tasks-Namespace, mit denen asynchrone Vorgänge dargestellt werden. |
Optionen:
| Option-1-V1: | Stream-Reader (async) await => Asynchrone: Verarbeitung async mit await. Dialog bleibt frei. |
| Option-1-V2: | Stream-Reader (async) Dialog blockiert (mit Thread-Sleep()). Durch die Struktur muss das Resultat mit der Eigenschaft .Result ausgewertet werden. Daher warten bis Programm beendet ist. In Basis-Methode ist die .Result (Eigenschaft) aktiv => also SYNC und warten auf Ende. Diese Methode ist nicht awaitable, daher Ausführung mit .Result! Keine ASYNC |
| Option-2 | Basis-Methode ist ASYNC und awaitable |
| Option-3 | Warnhinweis dass await-Operator fehlt. Dialog bleibt frei! |
| Option-4: | Warnhinweis dass await-Operator fehlt. Dialog ist blockiert. Stream-Reader in Class::Methode (Helper) implementiert ohne async.(Dialog bleibt blokiert) |
| Option-5: | Return-Type: Keine Warnungen. Dialog bleibt frei. |
| Option-6: | Design-Muster für AWAITABLE Dialog bleibt frei |
| Option-7: | Return-Type: IAsyncEnumerable https://learn.microsoft.com/de-de/dotnet/csharp/asynchronous-programming/async-return-types |
| Option-8: | Return-Type: TASK https://learn.microsoft.com/de-de/dotnet/csharp/asynchronous-programming/async-return-types |
| Option-9: | ASYNC: Dieses Besipiel mit List-Task- kommt aus fho.frm_GPIO_Master L298 / TB6600: So eine Scheisse |
| Option-10: | ASYNC: SampleSynchAsync._CallAsyncMethodeStreamReader_Synch_Option04(_FileName) Mit dieser Implementierung ist der Dialog nicht blockiert, also ASYNC. Es braucht also einen zusätzlichen Task.Run mit einer await;async;await implementierung für einen ASYNC-Vorgang in einer Lambda-Expression |
| Option-11: | SYNC: SampleSynchAsync._CallAsyncMethodeStreamReader_Synch_Option04(_FileName) Mit dieser Implementierung ist der Dialog blockiert, also SYNC. Die Methode [SampleSynchAsync._CallAsyncMethodeStreamReader_Synch_Option04()] wird mit await gestartet, also warten bis diese Methode ausgeführt wurde |
|
private |
SYNC-Operations: Verschiedene Operation in Zusammenhang mit StreamReader-Klasse.
| sender | |
| e |
Optionen:
| Option-1 | Stream-Reader Lokal in Option-1 implementiert mit Task.Run und async in Task-Signatur (Dialog bleibt blokiert) Stream-Reader ASYNC mit Task-Methode (Lambda) damit der StreamReader async mit await ausgeführt werden kann. |
| Option-2 | Stream-Reader in Class::Methode implementiert ohne async. (Dialog bleibt blokiert) CLASS Stream-Reader ASYNC mit Task-Methode (Lambda) in einer externen Methode Achtung: .Result ist in externer Methode |
| Option-3 | Damit kann eine asynchrone Methode mit Task aus einer SYNCH-Methode ausgeführt werden! Durch den Einsatz von .Result wird einfach auf die Ausführung gewartet (kein ASYNC) , und das Dialog kann nicht benutzt werden. Achtung: .Result wird in lokaler Methode ausgeführt. |
| Option-4 | Stream-Reader Lokal in Option-1 implementiert mit Task.Run und async in Task-Signatur (Dialog bleibt blokiert) Durch den Einsatz von .Result wird einfach auf die Ausführung gewartet (kein ASYNC) , und das Dialog kann nicht benutzt werden. Achtung: .Result wird in lokaler Methode ausgeführt. |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Ausführen einer normalen STATIC-BOOL Methode aus einer Klasse (sym.frm.net.Exxas_PowerBi) mit ASYNC-Muster.
| sender | |
| e |
Optionen:
| Option-1: | Project: sym.frm.net.Exxas_PowerBi::frmExxasUserWorkingTime::btnVersion1000_Click() Damit eine bestehende Klasse/Methode (SampleAsyncTaskMethode_PowerBi._CreateUserWorkingTimeInformation()) in einer asynchronen Umgebung ausgeführt werden kann, muss (kann) die Methode SampleAsyncTaskMethode_PowerBi._ProcessingVersion1000Task() verwendet werden. Dadurch ist es möglich mit der implementierten Version unter Option-1, den ganzen Process als ASYNC-Verarbeitung auszuführen ohne die Blockade des Dialoges. Kann so vor allem da eingesetzt werden, wo bestehende Methoden in einer async Umgebung ausgeführt werden müssen. |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Damit dieser Teil der Anwendung als await ausgeführt werden kann, muss die Methode [_ProcessingVersion1000Task] awaitable sein! Zudem muss im Bereich der Funktion (lambda) auch async definiert sein!
|
private |
Ausführen async-Methode [HelperAsyncRESTRequest._HelperAsyncRequestExxas] in einer nicht asynch Umgebung / Methode.
| sender | |
| e |
Optionen:
| Option-1: | SampleAsyncTaskMethode_ExxasClient._CallAsyncMethodeWithoutAwait_from_ExxasClient_LansweeperStart() Ausführen async-Methode [HelperAsyncRESTRequest._HelperAsyncRequestExxas] in einer nicht asynch Umgebung / Methode. Der ganze Process ist nicht als async deklaraiert, und darf es auch nicht sein. Die Verarbeitung der REST-Anforderung an EXXAS muss SEQUENTIELL und MAX. 2/SEC ausgeführt werden, ansonten bricht EXXAS die API ab, und blockiert den Zugang für 5-Minuten. Der Request an Exxas für Authentifizierung muss aber async sein, daher die Task-Methode mit async im Lambda-Ausdruck. |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
INC: 29.09.2025 [tsAClassSampleSynchAsyncCall003Async_Click] => Aktueller ToDo => tsAClassSampleSynchAsyncCall003Async_Click::cbOption09.
| sender | |
| e |
Optionen:
| Zusammenfassung | Zusammenfassung Optionen 1 bis 4 Es werden 3 Processe zum schreiben einer ASCII-Datei ausgeführt, welche nach einander gestartet werden. Die beiden Optionen 3 und 4 machen grundsätzlich keinen Sinn! Mit der ASYNC/AWAIT Logik warten die einzelnen Process (Axis: X, Y, Z) immer auf die Beendigung des aktiven Processes, dazu auch die Option AWAIT! Somit macht der Einsatz von lock() einfach keinen Sinn. |
| Option-1: | Task: AWAIT SampleSynchAsyncStreamWriter._ExecuteAxisTaskMainStreamWriter() _IsLockIsActive=FALSE |
| Option-2: | Task: AWAIT SampleSynchAsyncStreamWriter._ExecuteAxisTaskMainStreamWriter() _IsLockIsActive=TRUE |
| Option-3: | Task.Factory: AWAIT SampleSynchAsyncStreamWriter._ExecuteAxisTaskMainFactoryStreamWriter() _IsLockIsActive=FALSE |
| Option-4: | Task.Factory: AWAIT SampleSynchAsyncStreamWriter._ExecuteAxisTaskMainFactoryStreamWriter() _IsLockIsActive=TRUE |
| Zusammenfassung | Zusammenfassung Optionen 5 bis 8 Es werden 3 Processe zum schreiben einer ASCII-Datei ausgeführt, welche nach einander gestartet werden. Bei den Optionen 5 bis 8 gibt es keinen AWAIT! Also direkter Start der einzelnen Prozesse. Durch die Schreibweise der File-Namen kann grundsätzlich nichts passieren bei der Task-Verarbeitung. Ist die Option lock() aktiv, werden die Processe immer einzeln pro Axis ausgeführt, also nur sequentiell und nicht parallel und/oder vom System abhängig. |
| Option-5: | Task: SampleSynchAsyncStreamWriter._ExecuteAxisTaskMainStreamWriter() _IsLockIsActive=FALSE |
| Option-6: | Task: SampleSynchAsyncStreamWriter._ExecuteAxisTaskMainStreamWriter() _IsLockIsActive=TRUE |
| Option-7: | Task.Factory: SampleSynchAsyncStreamWriter._ExecuteAxisTaskMainFactoryStreamWriter() _IsLockIsActive=FALSE |
| Option-8: | Task.Factory: SampleSynchAsyncStreamWriter._ExecuteAxisTaskMainFactoryStreamWriter() _IsLockIsActive=TRUE |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Any Samples : Class Task-001 : Async-001.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTask001
|
private |
INF: 24.10.2024 => Aktuelle Frage nach Task.Run() vs Task.FactoryRun() [frmDotNetSamples:tsAClassSampleTask001Async002_Click()].
Menu: Any Samples : Class Task-001 : Async-002
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
==> Siehe auch Class: MyClassDesignPatternSample04 (AnyClass Design-Pattern 004) Geht der Frage nach, kann eine Standard-Methode [_MakeAwaitableMainTaskProcess()] zu Awaitable gemacht werden
Feler: CS4010 Option-H / -I CS4010 Async Lambdaausdruck kann nicht in Delegattyp Func<string> konvertiert werden. Async Lambdaausdruck gibt möglicherweise void, Task oder Task<T> zurück. Diese können nicht in Func<string> konvertiert werden. (fho.frm.net.Microsoft_DotNetSamples )
Das Problem war der Type für den Return-Value muss <Task<string>> sein, da async in der Signatur. Grundsätzlich ist zu sagen, dass mehr auf die linke Seite bei den Return-Type geachtet werden muss. Zusätzlich muss mehr Zeit verwendet werden um etwelche Fehlermeldungen z.B. CS4010 zu verstehen!
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTask001
|
private |
Menu: Any Samples : Class Task-001 : Async-003.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTask001
|
private |
Menu: Any Samples : Class Task-001 : Async-004.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTask001
1. ASYNC
2. ASYNC
3. ASYNC
4. Task.Run aber nicht async und await.
|
private |
Menu: Any Samples : Class Task-001 : Async-005.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Source in Namespace: fho.frm.net.Microsoft_DotNetSamples.ClassMethode Class: SampleTask001
5.
|
private |
Menu: Any Samples : Class Task-View : Class TaskView-PERSON HelperTaskView-Class (PERSON) Die Logik sowie die Daten f�r die Class Person befindet sich in einer Methode!
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
SYNC: HelperTaskViewSampleFunctions
ASYNC: HelperTaskViewSampleFunctions
SYNC: frmTaskView001
ASYNC: frmTaskView001
|
private |
Menu: Any Samples : Class Task-View : Class TaskView-STRING => Keine Implementierung HelperTaskView-Class (STRING).
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Menu: Any Samples : Class Task-View : Class TaskView-VOID => Keine Implementierung HelperTaskView-Class (VOID).
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
Verschiedene Varianten f�r Thread-Processe.
| sender | Sender-Object |
| e | Event |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Die Versionen Option-1 und Option-2 machen eigentlich in SICH keinen unterschied. Beide Threads werden ganz normal ausgefhrt. Der await-Operator hat absolut keine Auswirkung auf die beiden in der Lambda-Definition enthaltenen Thread-Start.
Option-1
await Task Beide Threads befinden sich in einer Task.Run Lamda Definition. Ein m�glicher Link
Option-2
Ohne await Beide Threads befinden sich in einer Task.Run Lamda Definition.
Option-3
Mit await in 2 verschiedenen Task Diese beiden Task (mit Thread) werden durch await nacheinander ausgef�hrt.
Option-4
Ohne await in 2 verschiedenen Task Diese beiden Task (mit Thread) werden sofort gleichzeitig ausgef�hrt.
await Task:
Beide Threads befinden sich in einer Task.Run Lamda Definition.
Ohne await
Beide Threads befinden sich in einer Task.Run Lamda Definition.
Mit await in 2 verschiedenen Task
Diese beiden Task (mit Thread) werden durch await nacheinander ausgef�hrt.
Ohne await in 2 verschiedenen Task
Diese beiden Task (mit Thread) werden sofort gleichzeitig ausgef�hrt.
|
private |
Startet eine UDP-Receive Session. Ausgabe an Debug anstelle Console.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
INF: 23.09.2024 => Implementierung UDP [frmDotNetSamples:tsAClassSampleThreadingStartThread002_Click] ==> UDP-Project (CNC)
Source-Code => D:\symPrototype\000_Network\000_UDP
Thread-Start mit Lambda-Expression und einem Return-Wert aus der Methode. ThreadStart => Methode muss void sein! Die Ausgabe in dieser Implementierung ist nur im DEBUG. zu sehen, also bei der Debug.Ausgabe in der IDE!
Original ohne Lambda-Expression und ohne Return-Value aus Methode ReceiveDatav2000()
Implementierung mit Lambda-Expression.
|
private |
INF: 09.01.2025 => [SampleDynamicXml::tsAClassSampleXMLOperationDynamicRead001_Click] Extension-Methodes und deren Implementierung.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
(D:\ServiceBDA) sym.cls_BDA_Delegate
Primary-File für Xml-Reader (Project)
Auslesen Elemente Framework-Versionen
Auslesen Elemente ohne Einschränkung in ein System.Xml.Linq.XElement Object. Lokale Methode können ausgeführt werden
Auslesen Elemente in XmlTextReader
Auslesen Elemente mit Suchfunktion nach Element und Attribute
Alte-Methode zum einlesen einer XML-Datei aus D:\symProduktiv\symBaseNet\sym.cls.net.core.Configuration! Xml-Reader und Stream
|
private |
Menu: Any Samples : Class Singelton : Singelton-001.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Sample: Singleton
Sample: Mutex
|
private |
C# Version 14.0 / Net 10.0 ==> Siehe Notebook mit VS-2026.
Achtung: C# noch nicht installiert/verfügbar INC: 20.03.2026 [ClassCSharp14::tsACSharpVersion_014_Default_Click] => .Net 10.0 aktiv. C#-14
| sender | |
| e |
Optionen:
| Option-1: Ungebundene generische Typen und nameof (Fix-Value) | Ab C# 14 kann das Argument für nameof ein ungebundener generischer Typ sein. nameof(List<>) ergibt beispielsweise List. In früheren Versionen von C# können nur geschlossene generische Typen wie List<int<verwendet werden, um den List Namen zurückzugeben.
|
| Option-2: korrekte Lösung: nameof(list) | Auflösung kommt aus Parameter welcher als nameof(xxx) übergeben wurde. Soweit also eine korrekte Lösung |
| Option-3: Lösung mit typeof().Name | Übergabe mit generischem Type. Braucht aber einen kompleten Type z.b: List<int> |
| Option-4: Lösung mit typeof().Name | Grundsätzlich analog Option-03, nur mehr tamtam rundherum. Braucht aber einen kompleten Type z.b: List<int> |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Remarks:
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-14
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-14#unbound-generic-types-and-nameof https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/breaking-changes/compiler%20breaking%20changes%20-%20dotnet%2010
|
private |
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Remarks:
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-14
|
private |
C# Version: 13.0 / Net 9.0: Diverse Varianten mit LINQ.
| sender | |
| e |
Optionen:
| Option-1: Most frequented word | Zeigt die meistverwendeten Ausdrücke in einem String an |
| Option-2: AggregatedBy | Summieren von Werten aus einem KeyValuePair |
| Option-3: OrderedDictionary | Gezieltes sortieren von Werten im OrderedDictionary |
| Option-4: Contrains-Parameters | Einschränken (Constraint) bei Verwendung von Parametern public static T _TempGenericClass<T>(string requestUri, T item, bool throwException = false) where T : class
|
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
C# Version: 13.0 / Net 9.0: Verwenden Methode-Parameter als Collection, nicht einzeln.
| sender | |
| e |
Optionen:
| Option-1: Parameters-Collection | Verwenden einer Parameter-List bei einer Methode https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-13#params-collections |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
| sender | |
| e |
Optionen:
| Option-1: PartialClassMembers: Partial-Class Members / Property | Sie können partial Eigenschaften und partial Indexer in C# 13 deklarieren. Partielle Eigenschaften und Indexer folgen im Allgemeinen denselben Regeln wie partial-Methoden: Sie erstellen eine deklarierende -Deklaration und eine implementierende -Deklaration. Die Signaturen der beiden Deklarationen müssen übereinstimmen. Eine Einschränkung besteht darin, dass Sie keine automatische Eigenschaftsdeklaration für die Implementierung einer partiellen Eigenschaft verwenden können. Eigenschaften, die keinen Textkörper deklarieren, werden als deklarierende Deklaration betrachtet. https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-13#more-partial-members https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/partial-member |
| Option-2: MyPartialClassA: Partial-Class Methode (Declaration / Implementierung) | Darstellung einer Methode in der Implementierungs-Class. Dieser Implementierungsteil kann auch deaktiviert werden, das Ganze kann immer noch kompiliert werden. Siehe Sample MyPartialClassB betreffend deaktivierung der Implementierung. |
| Option-3: RegExSourceGenerator: Partial-Class Regex-Anwendung | A: Prüfen einer String-Liste mit Begriffen => Return-Liste enthält alle korrekten Inhalte B: Prüfen einer String-Liste mit Begriffen => Prüft mit Ja/Nein begriffe |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
|
private |
C# Version: 13.0 / Net 9.0: Threading und neue lock-Varianten.
Beinhaltet verschiedene Methoden zu Lock-Funktionen. Es muss sichergestellt sein, dass kein Code parallel ausgeführt wird, der nicht so ausgeführt werden darf.
INC: 31.12.2025 [fho.frm.net.Microsoft_DotNetSamples.ClassMethode::ClassCSharp13] => .Net 9.0 C#-13.0 Threading-Lock
Link: https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-13#new-lock-object
| sender | |
| e |
Remarks:
Link: https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-13#new-lock-object
Optionen:
| Option-1: ASYNC (Awaitable) | _GetAmountFromAccount_v1000() => mit lock(this), System=>Sequentiell, Dialog open Instance-Member mit Task-Number als Parameter. In Methode await Task.Run() mit Lambda-Expression, _GetAmountFromAccount_v1000() ist somit als async (awaitable) einsetzbar. Im Lambda-Code ist eine lock()-Anweisung, zum Schutz einer parallelen Ausführung. Also nur sequentielle Ausführung. |
| Option-2: ASYNC (Awaitable) | _GetAmountFromAccount_v1100() => ohne lock(this) System=>CHAOS=>Dialog open Instance-Member mit Task-Number als Parameter. In Methode await Task.Run() mit Lambda-Expression, _GetAmountFromAccount_v1000() ist somit als async (awaitable) einsetzbar. Im Lambda-Code ist keine eine lock()-Anweisung, damit also parallele Ausführung oder einfach CHAOS! Keine Kontrolle über die Reihenfolge bei der Ausführung! |
| Option-3: ASYNC (Awaitable) | _GetAmountFromAccount_v1100() => ohne lock(this) System=>ASYNC-AWAIT=>Sequentiell, Dialog blocked (Result) Instance-Member mit Task-Number als Parameter. In Methode await Task.Run() mit Lambda-Expression, _GetAmountFromAccount_v1000() ist somit als async (awaitable) einsetzbar. Im Lambda-Code ist keine eine lock()-Anweisung, damit eine parallele Ausführung verhindert werden kann, wird die Methode mit AWAIT und .Result ausgeführt, damit bleibt der Dialog blockiert, und die Anwendung wird sequentiell ausgeführt. |
| Option-4: (Awaitable) | _GetAmountFromAccount_v1200() => lock(aus Instance) Instance-Member System=>Sequentiell, Dialog open und Task-View Form. Kein ASYNC / ASYNC .Result oder etwas ähnliches! Einfach nur AWAITABLE und SQUENTIELLE Ausführung. Der Dialog bleibt offen! |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: case-1:SYNC | _GetAmountFromAccount_v3000()::Case-1: lock(static-version) System=>Sequentiell ==> Parameter:Task-Number. |
| Option-9: case-2:SYNC | _GetAmountFromAccount_v3000()::Case-2: System.Threading.Lock.Scope System=>Sequentiell ==> Parameter:Task-Number. |
| Option-10: case-3:SYNC | _GetAmountFromAccount_v3000()::Case-3: keinen Schutz System=CHAOS ==> Parameter:Task-Number. |
cbOption01: _GetAmountFromAccount_v1000()
cbOption02: _GetAmountFromAccount_v1100(): System-Chaos
cbOption03: _GetAmountFromAccount_v1100(): System-Sequentiell
cbOption04: _GetAmountFromAccount_v1200()
cbOption08: _GetAmountFromAccount_v3000(1)
cbOption09: _GetAmountFromAccount_v3000(2)
cbOption10: _GetAmountFromAccount_v3000(3)
|
private |
Sammlung von Sample-Code zu.
| A | ASYNC-Methoden mit: ref locals, unsafe code, iteration |
| B | Anwendung yield Statement |
| sender | |
| e |
Optionen:
| Option-1: Direkt ohne Task und Lambda-Expression | Einfache Art und Weise die Methode _UseLocalParameterAsync() ASYNC auszuführen. Der Dialog bleibt offen, da die Basis-Mehode tsACSharpVersion_CSharp13_ThreadingLockASYNC_Click() ebenfalls als async deklariert ist. |
| Option-2: Task.Run() | Task.Run() Methode mit Lamdba-Code. Task.Run() mit await und in Lambda-Expression ebenfalls mit async und await. Eigentlich auch schon doppelt! |
| Option-3: Ref.-Value als Array | Rückgabe eines IEnumerable-Sring aus einem String-Array |
| Option-4: Rückgabe eines IEnumerable-Int Value | |
| Option-5: Anwendung yield Statement und async-code | Beispiel von Microsoft. RefLocalsUnsafeCodeIteration._GetValueFromYield_1000() Link: https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/statements/yield |
| Option-6: _GetValueFromYield_1101() |
|
| Option-7: _GetValueFromYield_1102() | Description siehe Option-06: |
| Option-8: IAsyncEnumerable | Wozu sollte ich ein solches Design-Muster verwenden??? |
| Option-9: | |
| Option-10: OverloadResolutionPrioritySample | Durch dieses Attribute sollte die Proprity-Liste bei Methoden-Overload beeinflusst werden können. |
| Option-11: |
|
private |
Menu: C# Versionen : C# Version-11 : ENUM.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
| ENUM | tsACSharpVersion11_ENUM_Click() |
|
private |
C# Version: 13.0 / Net 9.0: Implicit Index Access im Array, class, struct und div. varianten zu generika.
| sender | |
| e |
Optionen:
| Option-1: 02.02.2026 => macht Sinn | Sortierung eines Array, und Ausgabe eine bestimmten Werte gemäss Soertierung |
| Option-2: 06.02.2026 => SampleClassRefStruct() | ReadOnlySpan<T> ist eine Referenzstruktur, die auf dem Stack alloziert wird und niemals in den verwalteten Heap verschoben werden kann. Referenzstrukturen unterliegen einer Reihe von Einschränkungen, um zu verhindern, dass sie in den verwalteten Heap verschoben werden.Dazu gehört, dass sie nicht geboxt, in Lambda-Ausdrücken erfasst, Variablen vom Typ Object oder dynamischen Variablen zugewiesen werden können und keine Schnittstellen implementieren dürfen. Eine ReadOnlySpan<T>-Instanz wird häufig verwendet, um auf die Elemente eines Arrays oder einen Teil eines Arrays zu verweisen. Im Gegensatz zu einem Array kann eine ReadOnlySpan<T>-Instanz jedoch auf verwalteten Speicher, nativen Speicher oder auf dem Stack verwalteten Speicher verweisen. Sie können z. B. einen generischen Typ wie den folgenden Code deklarieren: https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-13#allows-ref-struct Vor C# 13 konnten ref struct Typen nicht als Typargument für einen generischen Typ oder eine generische Methode deklariert werden. Jetzt können generische Typdeklarationen eine Antieinschränkung allows ref structhinzufügen. Diese Antieinschränkung deklariert, dass das typargument, das für diesen Typparameter bereitgestellt wird, ein ref struct Typ sein kann. Der Compiler erzwingt Ref-Sicherheitsregeln für alle Instanzen dieses Typparameters. Auf diese Weise können Typen wie System.Span<T> und System.ReadOnlySpan<T> ggf. mit generischen Algorithmen verwendet werden. Weitere Informationen finden Sie in den Updates für where und im Artikel zum Programmierhandbuch über generische Einschränkungen . |
| Option-3: 06.02.2026 => SampleClassPropertyClass() | Zugriff / Verwendung der Daten auf normalem Weg via reflections |
| Option-4: 06.02.2026 => SampleClassGeneric001 | Standard Klasse und generische Methode |
| Option-5: 06.02.2026 => SampleClassGeneric002<T> | Der generische Type wird direkt via Constructor übergeben. |
| Option-6: 06.02.2026 => ref struct nochmals | Muss genauer analysiert werden! |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Hilfe
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-13
https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/configure-language-version
https://learn.microsoft.com/de-de/dotnet/core/whats-new/dotnet-9/overview
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-13
|
private |
VCS: 06.12.2024 => C#-12 => [ClassCSharp12::tsACSharpVersion_Interceptors_Click] Lauffähige Version: interceptors.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Sample Interceptor aus .Net 8.0 und C# 12.0 FUNKTIONIERT
Dieses Ganze Kapitel ist interessant, aber ein komplettes [bastel-wastel] mit Zeilen-Zählen Tool. Und nur für ganz spezielle Anwendungen (temp. Korrekturen) im Source-Code zu verwenden.
Interceptors sind ein experimentelles Feature, das im Vorschaumodus mit C# 12 verfügbar ist. Das Feature kann in einer zukünftigen Version Breaking Changes unterliegen oder entfernt werden. Daher wird es nicht für Produktions- oder freigegebene Anwendungen empfohlen.
Um Interceptors zu verwenden, muss das Benutzerprojekt die Eigenschaft <InterceptorsPreviewNamespaces> angeben. Dies ist eine Liste von Namespaces, die Abfangvorrichtungen enthalten dürfen.
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-12#interceptors
Achtung: muss zwingend im Project-Eigenschaft XML Bereich: <PropertyGroup> definiert werden!
<InterceptorsPreviewNamespaces>;fho.frm.net.Microsoft_DotNetSamples.ClassCSharpVersion.Interceptors</InterceptorsPreviewNamespaces>
|
private |
Menu: C# Versionen : C# Version-11 : Readonly VCS: 11.11.2024 => C#-11 => [ClassCSharp11::tsACSharpVersion11_Readonly_Click] Problem [readonly, ref, struct] etc..
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
| Fehler im Sandcastle ==> Readonly | SHFB: Error BE0065: TransformComponent: [P:fho.frm.net.Microsoft_DotNetSamples.ClassCSharpVersion.TestReadOnlySpan_Class._RefFieldName] An error occurred while attempting to transform the reflection data to a topic. The error message was: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. |
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-12
Struct
Struct
Struct
|
private |
VCS: 12.11.2024 [No Display-Output] => C#-12 => [ClassCSharp12::tsACSharpVersion_PrimaryConstructor_Click] primary constructor, base, this ...
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
(Basis) Class zur Vererbung mit PRIMARY-CONSTRUCTOR
Class mit Constructor [base]
Class mit Constructor [this]
(Base-Class) CSharpVersion12ConstructorSampleClassBase
Class CSharpVersion12ConstructorSampleClass mit Vererbung aus: CSharpVersion12ConstructorSampleClassBase
Class CSharpVersion12ConstructorSampleClass this auf (call) _SampleClass_001
|
private |
VCS: 15.11.2024 => C#-12 => [ClassCSharp12::tsACSharpVersion_TupelType_Click] Tupel-Typen, List<(string _CustomerName, string _Scanserver)>.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Array of named tuples (LINQ)
Umstellung auf .Net 8.0 n�tig
Tuple-Types
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-tuples
https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/builtin-types/value-tuples https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.aggregate?view=net-8.0
Zählt Anzahl score >= 10: Achtung => 0-Basiert!!
Addieren Value aus score
1
dataB.Aggregate(0, (_seed, _func) => _seed += (_func.score + _func.count));
LINQ
Analyse für Projekt:D:\Service.Levantis.Exxas\sym.frm.net.Exxas_Client:Lansweeper-Auswertung
Kann als sinnvolle Soll/Haben Summieurng verwendet werden.
Suche nach dem längsten Begriff
Suchen nach Anzahl geraden Zahlen im Array (im Moment noch wahnsinnig wichtig!!)
Frage Gerade/Ungerade (eaven/odd)
foreach über Tupel-Type: eigentlicg ganz einfach
|
private |
VCS: 11.11.2024 => C#-11 => [ClassCSharp11::tsACSharpVersion11_ZeichenfolgenliteraleUtf8_Click] Aktuelle Position im Projekt. Auslesen Daten aus ReadonlySpan _FieldA INF: 04.03.2025 => Das ist aber ganz schön schräg!!!! =>pragma warning disable CS0108 in .editorconfig.
Menu: C# Versionen : C# Version-11 : Zeichenfolgeliterale Diese Methode versucht zu klären was es braucht für [ReadOnlySpan]: ref struct. Nur die ref struct kann diese struct auch implementieren!
22.10.2024 => Problem mit dieser Methode und SandCastle. [TestReadOnlySpan_Class] Ref.-STRUCT (Achtung: Hinweis OBSOLETE wird von Sandcastle eingefügt!! Fehler)
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-11
| Zeichenfolgen | tsACSharpVersion11_ZeichenfolgenliteraleUtf8_Click() |
Instance Class C-Sharp 11.0
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-12#ref-readonly-parameters Neues aus C#-12 .Net 8.0: aus VersionEncoding to UTF-8 Post-Fix:
https://learn.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-12#ref-readonly-parameters Neues aus C#-12 .Net 8.0: Encoding to UTF-8 Post-Fix: Keine intelligente Aktion, nach .ToString(): die Daten im byte[] können nicht mehr gelesen werden
|
private |
C# ternary conditional operator: Ternärer-Operator ?: [ (Ausdruck true/false) ? true-value : false-value.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Der bedingte Operator ?:, der auch als ternärer bedingter Operator bekannt ist, wertet einen booleschen Ausdruck aus und gibt das Ergebnis für einen der zwei Ausdrücke zurück, abhängig davon, ob der boolesche Ausdruck true oder false ergibt.
|
private |
C# override methode.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
Dieses Kapitel lassen wir einfach wie es ist. Keine speziellen Code-Design mit func/lambda etc. Alles was dann kommt macht die Wartung einfach immer komplizierter! Für alles was alt ist, kann das ObsoleteAttribute verwendet werden!! Ansonsten bleiben alle Methoden wo, und wie sie sind!
|
private |
C# Token und Varianten der Darstellung CHK: 11.03.2024 => SampleLambdaAusdruckBody._GetProgramName()-Methode Lambda und Ausdruckskörper.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/language-specification/expressions#124-operators https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/language-specification/expressions#1219-anonymous-function-expressions https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/operators/lambda-operator#expression-body-definition https://learn.microsoft.com/de-de/dotnet/csharp/language-reference/operators/lambda-operator https://learn.microsoft.com/de-de/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members
Sample-Version mit switch
Operator Lambdaausdruck [=>] mit switch
Operator Lambdaausdruck [=>] Standard
Operator Lambdaausdruck [=>] Standard
Operator Lambdaausdruck [=>] anonyme Funktion 1 Parameter no Return
|
private |
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
https://learn.microsoft.com/de-de/semantic-kernel/concepts/plugins/?pivots=programming-language-csharp https://learn.microsoft.com/de-de/semantic-kernel/get-started/quick-start-guide?pivots=programming-language-csharp
| Microsoft KI | Achtung: Dieses Sample wir in dieser Umgebung nicht realisiert. Das Problem liegt grundsätzlich an der Menge von externen Bibliotheken die installiert werde müssen! |
In dieser Sample-Applikation muss alles ohne zusätzlich Abhängigkeiten auskommen, auch sollen keine NuGet-Bibliotheken geladen werden, welche dann immer wieder aktualisiert werden müssen.
|
private |
CHK: 30.06.2025 => Implementierung Raspberry Processor Menu: Raspberry : Dot-Net 6.0 : Raspberry-System.
| sender | |
| e |
Optionen:
| Option-1: | |
| Option-2: | |
| Option-3: | |
| Option-4: | |
| Option-5: | |
| Option-6: | |
| Option-7: | |
| Option-8: | |
| Option-9: | |
| Option-10: | |
| Option-11: |
| 07.07.2025 | Die Bezeichnung BCM2835 im cpuinfo ist einfach veraltet, und wird nicht mehr verwendet. Ich habe die beiden enum (Processor / Model) aus diesem Beispiel so angepasst, dass die RPi-Version 3 / 3B / 3B+ mit > Debian 12.0 noch funktionieren mit der Software aus H:\000_Projekte\000_RPi\001_Software\004_Pi3 (USB-Stick). Für die nachfolgenden Projekte für RPi-4 / -5 habe ich mich für die Microsoft-Library Verison entschieden. (H:\000_Projekte\000_RPi\001_Software\008_Raspberry_Microsoft) Details siehe im Dokument: H:\000_Projekte\000000_SoftwareProjektStatus\RaspberrySoftwareImplementierungen.odt |
| 01.01.2024 | Im Projekt Raspberry.System wird die Problematik mit dem Processor-Type und deren Hardware-Einstellungen (Adressen) behandelt. Problem an der ganzen Sache ist, dass der Name f�r die Enum-Zurodnung aus dem Rapsberry ($ cat /proc/cpuinfo) eigentlich nur immer Fix auf BCM2835 lautet. Die vor allem bei den 3 B/B+ -Modellen. |
| Debian Version 11.0 bullseye | Bei der letzten Installation einer Linux-Version habe ich Version: bullseye (11.0) instaliert. Diese Version wurde autmatisch mit der SD-Card Schreibsoftware ausgeliefert. In dieser Version war der Feld-Name : Type mit BCM2835 vorhanden! |
| Debian Version 12.0 bookworm | Installiert mann eine neue bookworm Version (12.0) wird im CPU-Info diese Information nicht mehr ausgegeben. Damit kann diese Raspberry.System-Version nicht mehr funktionieren. Der Rpi gibt dann beim start einer Software aus Basis dieses Modules einfach eine Meldung aus => System ist kein Raspberry PI!! Und beendent seine Funktion. |
Diese Informationen müssen in die cpuinfo.txt Datei (\sampledata\cpuinfo.txt)
|
private |
Übergeben des zurückgegebenden Token über die CancellationTokenSource. Token-Eigenschaft an jede Aufgabe oder Thread, der zum Lauschen verwendet wird, um den Abbruch zu bemerken.
|
private |
23.04.2024: weiss aktuelle nicht mehr was ich machen wollte im Detail
| files | |
| _ThreadId |
23.04.2024: weiss aktuelle nicht mehr was ich machen wollte im Detail
| callDuration | |
| threadId |
Instanziieren eines CancellationTokenSource-Objekt, das die Abbruchbenachrichtigung verwaltet und an die einzelnen Abbruchtoken sendet.
|
staticprivate |
|
staticprivate |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Required designer variable.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |