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

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

Mitglieder
» Liste / Suche
» Wer ist online?

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

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Th69
Thema: ADOX Textdatei/csv verknüpfen in Access
Am Gestern, im Forum: Datentechnologien

Ja, da mußt du den kompletten "Provider String" angeben, s. z.B. Microsoft Jet OLE DB 4.0 connection strings bzw. Microsoft ACE OLEDB 12.0 connection strings.

PS: Access ist keine (wirkliche) Datenbank. ;-)

Thema: Usercontrol mit Comboboxen
Am Gestern, im Forum: GUI: WPF und XAML

Die Links sind nur meine generelle Signatur...

Aber hier noch extra für dich: Communication between ViewModels with MVVM (schau dir also mal die MVVM-Frameworks an, z.B. mittels MVVM Light: Communicate Between Two View Models Using Messenger).

Thema: Usercontrol mit Comboboxen
Am Gestern, im Forum: GUI: WPF und XAML

Wenn du Daten zwischen den ViewModels austauschen willst, dann müssen diese sich kennen (d.h. gib entsprechende Referenzen weiter).
Alternative wäre ein übergeordnetes ViewModel, das dann die Daten an die Sub-ViewModels weiterreicht.

Thema: Dictionary erstellen - Code optimieren ?
Am Gestern, im Forum: Code-Reviews

@Abt: Ja, du hast recht, die ganze foreach-Schleife ist hier überflüssig - ich habe gestern übersehen, daß hier keine Überprüfung der einzelnen OpenTask vorgenommen wird, sondern nur ob die UserId schon existiert oder nicht.

PS: Bzgl. var - dann solltet ihr nicht meine Codes sehen...
Aber auch hier die erste Zeile sollte m.e. besser


var result = new Dictionary<long, List<TaskTO>>();
oder aber


Dictionary<long, List<TaskTO>> result = new();
geschrieben werden.

Wobei ich mich hier generell frage, warum hat TaskTO nicht eine Methode zum Abfragen der OpenTasks?

Thema: Dictionary erstellen - Code optimieren ?
Am im Forum: Code-Reviews

@Abt: Die leere Liste wird nicht überschrieben, sondern openTask dieser Liste hinzugefügt.

Statt ContainsKey sollte besser TryGetValue verwendet werden (damit man nicht danach per Index den Eintrag wieder neu suchen muß).

Thema: Programme auf einem anderen PC starten
Am im Forum: Rund um die Programmierung

Man könnte auch ein "Shared"-Verzeichnis als Austausch nehmen: Accessing Local Files and Folders on Remote Desktop Session oder File Sharing through RDP from Windows
Das Remote-Programm würde also z.B. eine Textdatei erzeugen (mit der Liste der Programme) und ein Client-Programm diese einlesen und versuchen die Programme zu öffnen.
So könnten dann auch noch die Dokumente übergeben werden (ich nehme mal an, daß nicht einfach nur Word, Excel o.ä. mit einem leeren Dokument gestartet werden soll).

Thema: DLL von Drittanbieter mit einbinden
Am im Forum: Grundlagen von C#

Nur zur Info. ILMerge gibt es weiterhin auf GitHub: ILMerge (und auch als NuGet Package), aber du hast recht, es funktioniert nicht mit WPF, da es die XAML Ressourcen nicht korrekt einbinden kann.
Aber es gibt LibZ als Alternative. ;-)

Thema: DLL von Drittanbieter mit einbinden
Am im Forum: Grundlagen von C#

Verwendest du .NET Framework 4.x oder .NET 5/6?
Suche mal nach ILMerge bzw. "self-contained".

Thema: Häufigkeitsdiagram
Am im Forum: GUI: Windows-Forms

Ein DataSet mußt du ja nicht von einem DataGridView aus füllen, sondern kannst die Werte auch programmatisch dort eintragen.

Ebenso beim manuellen Hinzufügen mittels der Series-Eigenschaft.
Füge einfach einmalig die 5 Werte hinzu:


for (int index = 0; index < 5; index++)
  chart1.Series[0].Points.AddXY(index,  0);
Und im TextBox-Ereignis dann den index ermitteln (also den Text in eine Zahl umwandeln) und per

chart1.Series[0].Points[index].YValues[0]++;
den Wert erhöhen (schau einfach in die Doku, um die Eigenschaften zu verstehen).

Thema: Häufigkeitsdiagram
Am im Forum: GUI: Windows-Forms

Wie hast du denn die Series angelegt (oder benutzt du DataBinding)?

Thema: Häufigkeitsdiagram
Am im Forum: GUI: Windows-Forms

Ich gebe dir einfach mal ein paar Stichworte für die Teilaufgaben:
- TextBox: im KeyPress- oder KeyDown-Ereignis auf Enter/Return-Taste (Key.Enter bzw. '\r') abfragen
- Chart: Series anlegen und Werte dort initial (d.h. mit 0) eintragen, danach die Werte an entsprechender Position (1-5) erhöhen (bessere Lösung mittels DataBinding: DataSource). Vllt. hilft dir auch folgender Code dazu: Chart Control in Windows Forms Application ?

Edit: Das Löschen der TextBox nach der Eingabe findest du sicherlich alleine raus...

Thema: Häufigkeitsdiagram
Am im Forum: GUI: Windows-Forms

Hallo und willkommen,

womit hast du denn konkret Probleme (denn die einzelnen Teilaufgaben lassen sich jeweils mit wenigen Codezeilen umsetzen)?

Thema: Menue: Shortcut triggert nur einmal
Am im Forum: GUI: WPF und XAML

Da paßt dann etwas mit dem Tastaturfokus nicht. Welches Control ist denn aktiv? Kannst du denn mit der Tab-Taste durch die Controls navigieren?

Thema: Programm starten trotz fehlender DLLs (zb. Spezieller Teiber)
Am im Forum: Rund um die Programmierung

Wenn die nativen Treiber-DLLs per [DllImport] eingebunden sind (und anscheinend nicht dynamisch geladen werden), dann läßt sich das nicht (direkt) abfangen.

Kannst du denn auf die gesamten Unity-Plugin Methoden dann verzichten? Dann könntest du diese (anstatt fest als Verweis anzugeben), mittels Assembly.Load bzw. Assembly.LoadFile laden. Du mußt dann aber dynamisch auf die Methoden zugreifen, s. z.B. Loading DLLs at runtime in C#.

Thema: Berechnung der Vor- und Nach Woche (KW)
Am im Forum: Grundlagen von C#

Schau dir mal die Methode GetDateFromWeekNumberAndDayOfWeek aus Get date from weeknumber an (das aktuelle Jahr solltest du dann noch als Parameter übergeben ;-).

Thema: Fenster schließt bei ShowDialog wenn Hidden
Am im Forum: GUI: WPF und XAML

Zitat von "Oberons"
In der Methode User_Change wird dann das Window mit der Login-Form wieder aufgerufen.
Ich habe da einen Verdacht - wie rufst du dort das MainWindow wieder auf?

Und ersetze im MainForm-Konstruktor mal this.ShowDialog() durch this.Show() (d.h. dies entspricht this.Visibility = Visibility.Visible). Du möchtest ja nicht das MainWindow innerhalb vom Konstruktor modal anzeigen.

Thema: Programm starten trotz fehlender DLLs (zb. Spezieller Teiber)
Am im Forum: Rund um die Programmierung

Hallo und willkommen,

wie greifst du denn auf die Kamera zu, d.h. welche DLLs (oder NuGet-Packages) hast du eingebunden?

Thema: Fenster schließt bei ShowDialog wenn Hidden
Am im Forum: GUI: WPF und XAML

Dann setze das MainWindow doch wieder auf Visible nach dem ShowDialog-Aufruf (d.h. wenn der Login erfolgreich war - ansonsten zeige wieder das Login-Fenster an, solange bis der Anwender "Abbrechen" (Cancel) auswählt).

Thema: Fenster schließt bei ShowDialog wenn Hidden
Am im Forum: GUI: WPF und XAML

Hallo und willkommen,

das ist das Standardverhalten beim Hauptfenster - wenn dieses geschlossen oder nicht mehr sichtbar ist, dann wird die gesamte Anwendung geschlossen (d.h. der Prozess beendet).
Das ist bei WPF nicht so einfach zu umgehen, da der Code dazu automatisch aus den XAML-Daten erzeugt wird (außer mittels des Application.Startup-Ereignisses, aber dann mußt du den gesamten Startup-Code dort erzeugen - s. Beispiel mittels new MainWindow()).

Warum willst du das denn (und was soll der Anwender dann mit deiner Anwendung noch weiter tun können)?

Thema: Steuererlemente in mehreren Formularen mit Container
Am im Forum: GUI: Windows-Forms

Welches Buch?

Thema: Steuererlemente in mehreren Formularen mit Container
Am im Forum: GUI: Windows-Forms

Hallo,

s. SplitContainer.Controls:

Zitat
Diese Eigenschaft ist für diese Klasse nicht relevant.
Der SplitContainer verfügt stattdessen über die beiden Eigenschaften Panel1 und Panel2.

Dein Code verletzt aber grundlegende Prinzipien der OOP, nämlich von einer Klasse (Form) auf die Interna einer anderen Klasse (Form) zuzugreifen, s.a. [FAQ] Kommunikation von 2 Forms (bzw. mein eigener Artikel zum Thema: Kommunikation von 2 Forms).

Thema: Wie baut man am besten Audio Live Encoder?
Am im Forum: Grafik und Sound

VLC benutzt die libVLC. Den gesamten Sourcecode gibt es unter VLC media player source code (habe ich mir jetzt aber nicht angeschaut - xy ist wohl ein eigenes Datenkompressionsformat - andere Formate gibt es unter Archiv: /pub/videolan/vlc/last/).

Und hier auch noch die Doku dazu: LibVLC and libvlccore documentation.
Für die Audio-Ausgabe speziell: aout.h (Audio output modules interface) (dort gibt es dann u.a. die Makros AOUT_FMT_SPDIF(p_format) und AOUT_FMT_HDMI(p_format) sowie die Struktur audio_output (bzw. audio_output _t)).
Du müßtest also dann mal in den Sourcen nach der Datei "vlc_aout.c" schauen.

Edit:
Standard-Audio-Schnittstellen für Windows gibt es einige, s. z.B. What's up with WASAPI?

Thema: SQL in List<T>
Am im Forum: Grundlagen von C#

Verwende einfach die Methode mit drei Parametern SetValue(Object, Object, Object[]) und übergebe null als letzten Parameter.

Ich hoffe, das ist nur ein Testprojekt, denn der Datenbankcode gehört nicht in den UI-Code (s. [Artikel] Drei-Schichten-Architektur)?!

Außerdem stimme ich Palladin007 zu.

Thema: Problem mit automatisierten Excel Start
Am im Forum: Office-Technologien

Verwendest du denn bei beiden Projekten (VS 2019 und 2022) jeweils die gleiche .NET-Version?

Und kommt der Fehler nur bei Debuggen aus VS heraus oder auch direkt beim Starten der Anwendung (vom Windows Explorer aus)?

Thema: Daten seriell von Mikrocontroller auslesen
Am im Forum: Rund um die Programmierung

Hallo,

was genau läuft denn schief?

Ein großer Fehler ist jetzt bei dir die erzeugten Endlosschleifen (schau mal im TaskManager auf die Prozessor-/Kernauslastung)!
Du mußt diese wartend oder blockierend machen (oder ist GetByteFromDevice() blockierend, da du ja von ConcurrentQueue und BlockingCollection geschrieben hast?). Zumindestens für die Sendeschleife sollte ein Thread.Sleep(x) hin (bei Benutzerauslösung der Flags reichen einige 100ms).

PS: Sofern du konstante Daten versendest, kann du einfach z.B. byte[] txData = { 4, 1, 2, 3, 4 }; schreiben (und sogar den string str einmalig vor der Schleife erzeugen - bzw. 2 für die beiden Fälle).

Thema: Abbrechen von Tasks
Am im Forum: Grundlagen von C#

Sorry wegen den Syntax-Fehlern, aber ich konnte deinen Code ja nicht bei mir testen (sondern habe ihn nur im Editor abgeändert).

Und wegen der Exception: Du mußt ja auch die OperationCanceledException abfangen.
Ich meinte aber nicht explizit bei jedem Kopieren-Aufruf, sondern um alle Aufrufe (also von #region Dateien kopieren bis #endregion Dateien kopieren /#endregion Sicherungsprotokoll erstellen - je nachdem ob und was du im Fall einer Exception in das Sicherungsprotokoll schreiben möchtest).
Wenn diese Exception trotzdem nicht gefangen wird, dann probiere mal, das token auch an die Task.Run-Methode zu übergeben.

Und bei


Desktophaken.Visibility = Visibility = Visibility;
meinte ich zum einen die unnötige zweifache Zuweisung von Visibility als auch daß du auf die Page.Visibility zugreifst (meintest du nicht eher Visibility.Visible?).

Das Auslagern der Kopier-Klasse in eine eigene Datei ist auf jeden Fall zu empfehlen (und wie schon geschrieben, verwende static, dann reduziert sich auch dein Code beim jeweiligen Aufruf zu Kopier.Kopieren(Quelle, Ziel, token) - bei Kopieren(Quelle, Ziel) müßtest du noch eine Hilfsmethode in deiner Sichern-Klasse erzeugen).

PS: XCopy ruft intern auch nur die entsprechenden System-Funktionen zum Kopieren von Verzeichnissen und Dateien auf (je nach Parameter), aber leider gibt es direkt für die XCopy-Funktionailtät keine API.
Es gäbe auch noch FileSystem.CopyDirectory, aber das unterstützt auch kein Abbrechen des Vorgangs.

Edit: Ich habe deinen letzten Beitrag jetzt erst gelesen (habe zu lange für diesen gebraucht).
Um eine Progressbar anzuzeigen, müßtest du vorher alle Ordner und Dateien durchgehen und die Gesamtgröße (oder zumindestens die Anzahl der Dateien) ermitteln und diese dann jeweils beim Kopieren aktualisieren (das ist aber schon fortgeschritten, da du dazu [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse) sowie [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke) benötigst).

Es freut mich für dich, daß es jetzt bei dir funktioniert (und ich dir helfen konnte ;-).

Thema: Abbrechen von Tasks
Am im Forum: Grundlagen von C#

OK, geänderter Code im Anhang.
Meine Änderungen habe ich mit // by Th69 kommentiert.

Du mußt jetzt noch um deine ganzen Kopiermethoden in der Go-Methode noch ein try ... catch (OperationCanceledException) setzen, damit diese Exception gefangen wird und alle weiteren Kopiermethoden nicht mehr aufgerufen werden (ich habe dies extra nicht gemacht, um deinen Code nicht weiter zu ändern, wie du ja auch geschrieben hast ;-).

Bedenke außerdem, daß beim Kopieren einer großen Datei auch erst nach Abschluß der Kopiervorgang unterbrochen wird (ansonsten müßtest du selber das Dateikopieren implementieren und dort dann für jeden Dateiblock token.ThrowIfCancellationRequested() aufrufen).

Aber noch ein paar sonstige Anmerkungen zu deinem Code:
- Niemals Pfad-Literale (wie z.B. "C:\Users\" oder @"\Desktop") im Code benutzen, sondern immer Environment.GetFolderPath benutzen (die Pfade können je nach System immer unterschiedlich sein)!
- Du erstellst immer wieder (unnötigerweise) neue Kopier-Objekte - da die Kopieren-Methode keine Instanzmember benutzt, sollte sie static sein (sollte auch von der CodeAnalyse als Warnung angezeigt werden).
- Du benutzt zwar schon teilweise die Path-Methoden, aber nicht konsequent. Alle Funktionalität bzgl. @"\" solltest du mit Path-Methoden programmieren.
(Wegen der using-Anweisung brauchst du nicht immer System.IO. vor Benutzung zu schreiben)
- Du hast mehrfach Desktophaken.Visibility = Visibility = Visibility; im Code stehen??? Und auch Desktopbox.Visibility sowie Desktopkreis.Visibility setzt du unnötigerweise jedesmal wieder beim Kopieren eines Verzeichnisses.

Viel Erfolg noch!

PS: Die Sichern.xaml scheint dieselbe Datei wie Sichern.xaml.cs zu sein!?!

Thema: Abbrechen von Tasks
Am im Forum: Grundlagen von C#

Dann füge mal deinen Code als Anhang an.

Thema: Abbrechen von Tasks
Am im Forum: Grundlagen von C#

Das hatte ich nur explizit hingeschrieben, damit Butzi74 den zugehörigen Code aus dem Artikel versteht.

Thema: Abbrechen von Tasks
Am im Forum: Grundlagen von C#

Es ist so ähnlich, wie du die Variable Abbruch gedacht hast, nur daß es thread- bzw. tasksafe ist. Du mußt nur in deinen Kopierschleifen den CancellationToken.IsCancellationRequested-Status überprüfen und dann ThrowIfCancellationRequested() aufrufen.

Lege dazu CancellationTokenSource als Membervariable an und rufe über das "Abbrechen"-Command dann dafür Cancel() auf (diese Variable mußt du dann noch als Parameter zusätzlich der Kopieren-Methode übergeben, damit diese darauf zugreifen kann).

PS: Dateipfade solltest du mit der Path.Combine-Methode zusammensetzen.