Laden...

Forenbeiträge von MrSparkle Ingesamt 5.658 Beiträge

22.10.2020 - 12:26 Uhr

Aus eigener Erfahrung kann ich sagen, daß man mit allen genannten Technologien viele tausende oder zehntausende 2D- und 3D-Objekte in Echtzeit rendern kann: WinForms/GDI+, WPF, JavaScript, DirectX, OpenGL etc. Die paar Linien und Grafiken, die du zeichnen möchtest, werden kein System in die Knie zwingen.

Wenn du bei deiner JavaScript-Umsetzung an die Grenzen gestoßen bist, dann liegt es jedenfalls nicht an der Grafik-Performance. Du kannst aber schauen, welcher Teil von deinem Code die meiste Rechenzeit benötigt, und diesen Code dann optimieren. Dazu gibt es ein Tool namens Profiler, der ist in VisualStudio integriert (für C#-Code), und inzwischen auch in jedem Browser (für JS-Code).

Wenn du sowieso schon alles einmal in JS umgesetzt hast, würde ich empfehlen, lieber erstmal deinen vorhandenen Code zu optimieren, ehe du anfängst, eine neue Technologie zu erlernen und damit dann wieder die gleichen Fehler machst. Das meinte ich u.a. mit "Erfahrung sammeln".

So ähnlich hatte ich es damals auch schon in Welche Entwicklungsumgebung für einen Flugsimulator? formuliert.

Und ein Link zu dem Clipping-Problem hatte ich bereits hier gepostet: Kann ich mit MonoGame ein Objekt definieren, auf dem jeglicher Inhalt am Rand abgeschnitten wird?

20.10.2020 - 20:52 Uhr

ASP.NET WebForms ist wirklich eine Uralt-Technologie, das wird kaum noch jemand hier benutzen. Aber hier gibt es eine Anleitung: How to make my webform to be multi-language?

20.10.2020 - 19:06 Uhr

in einem Benutzersteuerelement

Zugriff auf die Anwendungseinstellungen hat aber in einem Steuerelement nichts zu suchen. Sie sollten von der Anwendung an das Steuerelement übergeben werden.

Siehe dazu: [Artikel] Drei-Schichten-Architektur

20.10.2020 - 12:45 Uhr

Du sprichst in Rätseln. Was genau meinst du mit "in der XAML-Datei"? Geht es nicht um RTF-Dateien? Und mit "aufgefüllt" meinst du, die Bilddateien werden als Binärdaten in die RTF-Datei eingebettet?

Die Code-Tags kannst du auch nachträglich einbauen, einfach auf Editieren klicken.

20.10.2020 - 12:31 Uhr

Kannst du dein Problem mal genauer beschreiben und eine konkrete Frage dazu stellen?

Für mich ergibt deine Beschreibung und der von dir gepostete Code keinen Sinn, und ich kann auch nicht erkennen, wo genau du ein Verständnisproblem hast. Da bisher noch keine Antworten gekommen sind, kannst du davon ausgehen, daß es anderen Helfern genauso geht.

Siehe dazu auch [Hinweis] Wie poste ich richtig?

20.10.2020 - 12:27 Uhr

Wenn ein Programm nicht tut, was es eigentlich tun sollte, kann man immer den Debugger verwenden, um den Programmablauf nachzuvollziehen: [Artikel] Debugger: Wie verwende ich den von Visual Studio?

20.10.2020 - 12:25 Uhr

Hast du dir die unterschiedlichen großen Dateien mal in einem Texteditor angeschaut?

Bitte beachte zukünftig auch [Hinweis] Wie poste ich richtig? und formatiere deinen Code mit den Code-Tags!

20.10.2020 - 12:22 Uhr

Das sieht alles sehr ungewöhnlich aus. Bist du sicher, daß das der übliche Workflow mit Monogame ist? Ich habe noch nie mit Monogame oder XNA gearbeitet, und du wirst hier im Forum auch kaum jemanden finden, der damit Erfahrungen hat.

Deswegen hatte ich vorgeschlagen, erstmal mit WinForms oder WPF anzufangen. Um die Linien und Grafiken zu zeichnen, und damit Erfahrung zu sammeln, reicht das nämlich völlig aus. Und zu diesen Technologien gibt es jede Menge Leute mit viel Erfahrung, die dir dabei helfen könnten.

20.10.2020 - 12:17 Uhr

Fängt der Artikel wirklich mit "C+ ist nun bald 20 Jahre alt." an? "C+"? Und das ist seit fast zwei Monaten so online, ohne daß das jemandem aufgefallen ist?

Wie seriös kann so etwas schon sein. Selbst @dotnetpro_mag schreibt auf Twitter "Wir gaben nur die Meinung der CEO wider." Immerhin hatten sie selbst Zweifel daran gehabt: "Wir haben auch überlegt, ob wir das bringen sollten." (@dotnetpro_mag, 27.08.2020).

Also, nehmt das nicht Ernst, was irgendwelche News-Redaktionen an irgendwelchen Meinungen von irgendwelchen CEOs von irgendwelchen "IT-Dienstleistern" weitergeben. Das ist bestenfalls nichts mehr als Hörensagen, schlimmstenfalls Fake News 😃

18.10.2020 - 17:29 Uhr

Sicher gehört kriminelle Energie dazu

Also ich sehe die kriminelle Energie eher bei demjenigen, der ein Überwachungsprogramm (offenbar) gegen den Willen des Benutzers installiert, und dann verhindern will, daß der Benutzer es beenden kann. Nach allem, was du hier dazu schreibst, solltest du davon ausgehen, daß das nicht legal ist.

Die gegenseitige Überwachung nenne ich "Security by Obscurity"

Security through Obscurity ist seit über 150 Jahren widerlegt. Abgesehen davon ist Security wirklich etwas anderes, als zu verhindern, daß ein Programm beendet werden kann.

PS: Du bist noch nicht so lange im Internet unterwegs, oder? Sonst wüßtest du, daß man einen Troll einfach ignorieren kann. Aber so wie du reagierst, zeigst du nur, daß die Kritik nicht ganz unberechtigt war. Und du hast dich nicht nur auf das Niveau des Trolls begeben, sondern noch einige Ebenen darunter.
Der Troll ist inzwischen gesperrt, und wenn du die Sache nicht auf sich beruhen läßt, dann wird dieser Thread auch zugemacht. Die Admins haben am Wochenende auch andere Sachen zu tun.

18.10.2020 - 15:38 Uhr

TwoWay-DataBinding funktioniert nur dann, wenn du das PropertyChanged-Ereignis auslöst. Ansonsten solltest du das Speichern und Laden von Dateien von der Benutzeroberfläche entkoppeln, das macht es wesentlich einfacher.

Siehe dazu [Artikel] MVVM und DataBinding und [Artikel] Drei-Schichten-Architektur

18.10.2020 - 15:33 Uhr

Alles, was außerhalb des Viewports ist, wird sowieso nicht gerendert.

Ansonsten siehe die 4 Möglichkeiten in der Antwort zu How to clip before DrawUserPrimitive?

16.10.2020 - 12:37 Uhr

ActiveX und SharpDevelop, ist das ein archäologisches Projekt? 8)

Siehe dazu Wie schreibe ich einen Restful Webservices unter SharpDevelop?

15.10.2020 - 20:16 Uhr

Das "Abschneiden" am Rand des Bildschirms bzw. des Viewports bzw. der Grafik nennt sich "Clipping". Das ist aber in jeder Rendering- oder Game-Engine bereits implementiert, und wird automatisch angewendet.

In deinem Fall wäre es wohl am einfachsten, das Ganze direkt in WinForms ([Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)) oder in WPF (mit einer Canvas) zu zeichnen, dann brauchst du keine externen Bibliotheken.

15.10.2020 - 20:13 Uhr

Warum verwendest du denn überhaupt Strings, wenn es sich doch um Zahlen handelt?

15.10.2020 - 20:12 Uhr

Zeig mal den Code für die Point_6_1.Yes-Eigenschaft.

Ansonsten kannst du dir mit dem Debugger anschauen, was genau dort passiert: [Artikel] Debugger: Wie verwende ich den von Visual Studio?

@witte: Danke für den Hinweis
@Kilian: Bitte beim nächsten Mal darauf achten, gleich im richtigen Forum zu posten. Das erhöht die Wahrscheinlichkeit auf eine korrekte Antwort 😃

PS: Dieser Code:

if (value == null) return false;
return true;

läßt sich auf folgende Zeile reduzieren:

return (value != null);

Siehe auch [Tipp] Anfängerhinweis == true / == false

14.10.2020 - 19:51 Uhr

Ich weiß wirklich nicht, wie man deine Fragen beantworten soll. Einerseits willst du dich nicht mit MonoGame beschäftigen, andererseits willst du wissen, wie man Grafiken rendern kann.

Ganz allgemein kann man sagen, daß man mit jeder Game- bzw. Rendering-Engine machen kann, wonach du fragst. Und die Unterschiede sind auch nicht besonders groß. Aber du sagst ja noch nicht einmal, ob es sich dabei um 3D- oder 2D-Grafiken handelt, einerseits schreibst du "Flugsimulator", andererseits Linien und Text...

Siehe dazu auch [FAQ] Wie finde ich den Einstieg in die 3D-Programmierung mit C#?

13.10.2020 - 15:35 Uhr

Versuche mal, dieser Anleitung hier zu folgen. Damit löschst du im Grunde den FontCache von WPF.
Wenn das nichts bringt, deaktiviere mal den Service "Windows Presentation Foundation Font Cache".

13.10.2020 - 12:06 Uhr

Hab dir ja erklärt, warum ich das so machen würde.
Du kannst es auch anders machen, dann hat dir JimStark ja schon geschrieben, wie es geht.

12.10.2020 - 14:44 Uhr

Aber wie bekomme ich die Daten aus dem HauptViewModel ohne CommandParamter rüber an das neue ViewModel?

Schau dir mal die Code-Beispiele und/oder das Beispiel-Projekt in [Artikel] MVVM und DataBinding an. Das ist tatsächlich ein Standard-Fall, den man im Grunde in jeder Anwendung hat.

Irgendwie habe ich das Gefühl, das hier das MVVM immens mehr Code hervorruft, als wenn ich alles gleich in der Code Behind geschrieben hätte.

Siehe dazu die einleitenden Sätze in [Artikel] MVVM und DataBinding

12.10.2020 - 14:39 Uhr

Es ergibt keinen Sinn, das Command in einem ViewModel zu definieren, das nicht existiert, solange es keine Auswahl gibt. Definiere das Command in deinem ViewModel des Fensters/des Controls und übergib den Employee als CommandParameter:

Command="{Binding HelloCommand}" CommandParmeter="{Binding SelectedEmployee}"

Dann kannst du das Command so zuweisen:

HelloCommand = new RelayCommand(param => SayHello((EmployeeViewModel)param), param => param != null);
12.10.2020 - 08:36 Uhr

Wenn ein DataBinding nicht wie erwartet funktioniert, kannst du einen DebugConverter verwenden, wie im Abschnitt "Debugging" in [Artikel] MVVM und DataBinding beschrieben.

12.10.2020 - 08:33 Uhr

Ich hatte angenommen, dass das Binding eines Commands intelligenter sei

Ich glaube, du hast den Artikel nicht richtig gelesen. Wenn du in deinem ersten Beispiel ein CommandParameter verwendest, und diesen in CanExecute abfragst, dann funktioniert es wie gewünscht.

09.10.2020 - 23:10 Uhr

wie kann ich bei einer Dependency Property eigene Variablen in den Eventargs übergeben

Gar nicht. Eine DependencyProperty ist eine Eigenschaft und kein Event. In deinem Code finde ich auch kein DependencyProperty.

Bitte erkläre dein Problem mal ein bißchen ausführlicher. Wozu meinst überhaupt du eine Unterscheidung zwischen Änderungen aus der Anwendung und durch den Benutzer zu brauchen? Da scheint mir schon die grundsätzliche Herangehensweise auf einem Fehlschluß zu basieren.

09.10.2020 - 23:07 Uhr

Da müsste ich doch einen Dienst/Task anlegen können mit ner einfachen BATCH die mir dann immer wenn meine Konsole verschindet diese wieder öffnet oder?

Wenn du hier ersthaft Hilfe suchst, versuch doch wenigstens, dein Problem in ganzen Sätzen zu erklären. Wer soll dir auf sowas eine sinnvolle Antwort geben?

Bitte beachte in deinem eigenen Interesse [Hinweis] Wie poste ich richtig?

09.10.2020 - 23:04 Uhr

Es gibt aber im Internet keine Vorschläge dazu und oder meine Suchbegriffe sind untauglich.

Wonach suchst du denn? Das erste Suchergebnis nach "update .net application" ist AutoUpdater.NET

Wenn ich deine Beiträge so lese, würde ich dir dringend raten, mal etwas systematischer an die Probleme heranzugehen.

09.10.2020 - 22:55 Uhr

Du mußt schon den richtigen Typ verwenden, d.h. dein MainWindow:

<Style  TargetType="local:MainWindow">

Zu deiner zweiten Frage, bitte beachte [Hinweis] Wie poste ich richtig?, erstelle einen Thread pro Frage und gibt uns mehr Informationen, um die Frage zu beantworten. "Ist es besser" hängt von vielen Faktoren ab.

08.10.2020 - 20:51 Uhr

Ich bin mir nicht sicher, was das OUTPUT im SQL Code soll

Das kommt aus dem Artikel.

Zusätzlich wird dort bei der Parameterzuweisung auf das "@" verzichtet:

cmd.Parameters.AddWithValue("Birthday", birthday);

Ich weiß auch nicht, wie es bei Access richtig ist, damit habe ich glücklicherweise seit längerem nichts mehr zu tun gehabt.

Allgemein würde ich von Acces auch dringend abraten. Es ist ein Office-Programm und keine Datenbank. Es gibt mittlerweile wesentlich bessere und kostenlose Alternativen.

08.10.2020 - 20:46 Uhr

Falls du den System.Windows.Media.MediaPlayer meinst, dann gibt es dort das MediaEnded-Event, auf das du reagieren kannst.

08.10.2020 - 20:43 Uhr

Zuerst könntest du in der Exception (bzw. deren InnerException) schauen, ob du weitere Infos dazu findest.

Dann könntest du Tools wie DependencyWalker oder dumpbin verwenden, um dir alle Abhängigkeiten anzeigen zu lassen. Evtl. fehlt das entsprechende C++ Redistributable Package.

08.10.2020 - 20:14 Uhr

Und wenn du deine ViewModels von einer Model-Klasse ableitest, dann ist das auch nicht MVVM-konform:

  
public class ViewModel : EntryBaseModel  
  
08.10.2020 - 20:07 Uhr

Danke für die ausführliche Antwort. Das war der interessanteste (und wahrscheinlich längste) Beitrag seit längerem hier im Forum.

Ich hab mich noch weiter zum Thema belesen, danke für die passenden Stichpunkte dazu. Die Vector-Klassen aus Systems.Numerics scheint die mit Abstand performanteste Implementierung zu sein, die es zur Zeit für .NET gibt. Leider baut der größte Teil meines 3D-Codes auf eigenen Vektor-Implementierungen auf, die entstanden ist, als es Systems.Numerics noch nicht gab. Da müßte ich also meine gesamte Code-Basis überarbeiten bzw. neu implementieren. Dazu kommt, daß mein Code überall Fließkommazahlen mit doppelter Genauigkeit verwendet, und Systems.Numerics nur einfache. 32-Bit reicht für das Rendering völlig aus, aber bei der Erstellung von Geometrie und Texturen können damit sichtbare Artefakte entstehen.

Meine Vektor-Typen mit expliziten SIMD-Anweisungen nachträglich auszustatten, ist dann auch nicht so vielversprechend, wie es zunächst klingt. Hier mal als Beispiel das Kreuzprodukt von zwei Vektoren:


public static Vector3 Cross(Vector3 left, Vector3 right)
{
	return new Vector3(
		left.Y * right.Z - left.Z * right.Y,
		left.Z * right.X - left.X * right.Z,
		left.X * right.Y - left.Y * right.X´);
}

Wenn man das als SSE umschreibt, dauert die Berechnung 11 anstatt 12 Befehlszyklen. Da muß man schon eine Menge Vektoren multiplizieren, bevor man mal eine Sekunde Rechenzeit spart. Und dann hat man Code, den man ein paar Wochen später schon nicht mehr versteht 😃

Wäre zwar schön gewesen, wenn der JIT-Kompiler das irgendwie automatisch optimieren könnte, aber wenn ich Code manuell optimieren muß, kann ich sicherlich an anderen Stellen wesentlich mehr Performance rausholen. War aber trotzdem sehr interessant, mit Assembler habe ich mich seit über 20 Jahren nicht mehr beschäftigt.

08.10.2020 - 20:03 Uhr

Für Hintergrundanwendungen würde sich ein Windows-Service oder eine TrayBar-Anwendung besser eignen.

07.10.2020 - 22:15 Uhr

Dafür gibt es doch Rückgabewerte?

07.10.2020 - 21:50 Uhr

Du solltest dir den Beispiel-Code noch mal anschauen. Du hast zuviele "@" und falsche Parameternamen. Du mußt schon in der SQL-Anweisung und bei der Parameter-Zuweisung die gleichen Namen verwenden.

07.10.2020 - 17:51 Uhr

Ohne ref geht etwas verloren? Wie soll das passieren?
Ansonsten ist der Aufrufer des Events immer der sender-Parameter des EventHandlers.

07.10.2020 - 16:46 Uhr
rd= abbController.Rapid.GetRapidData(sRobot, sModule,sVar);
rd.ValueChanged += routine;

Der Datentyp von rd hat ein Event ValueChanged mit einem bestimmten Event-Handler-Typ. Den mußt du anstatt object für deinen Parameter routine (oder besser eventHandler) verwenden.

07.10.2020 - 16:42 Uhr

Genau in dem Bereich, der über 0 des Hauptmonitors liegt, ändert sich der Mauszeiger zu "Größenänderung" und ich kann mit Mausklick nur noch die rechte untere Ecke des Fensters ziehen.

Was hat dieses Problem denn mit dem Code zu tun, den du gepostet hast?

Gibt es dieses Verhalten auch auf einem anderen Rechner? Ist das nur bei deinem Programm so, oder bei allen Fenstern? Falls ja, liegt es an deinem Code, aber sicher nicht an dem, den du gepostet hast.

04.10.2020 - 13:31 Uhr

Genau dafür verwendest du doch die Rekursion. Die läuft so lange durch, bis es keine weiteren Unterebenen gibt.

04.10.2020 - 12:44 Uhr

Wenn du eine StackOverflowException bekommst, dann läuft deine Rekursion in einer Endlosschleife, d.h., die Rekursion wird niemals beendet.

Leider ist dein Quellcode absolut unlesbar, das fängt schon bei der Namensgebung der Variablen und Klassen an. Und niemand weiß, was z.B. Childs_BaugruppenListe macht.

Verwende einfach den Debugger, um herauszufinden, was dein Code macht, und warum die Rekursion niemals beendet wird.

[Artikel] Debugger: Wie verwende ich den von Visual Studio?
[Artikel] C#: Richtlinien für die Namensvergabe

30.09.2020 - 20:22 Uhr

Hallo,

ich hab ein bißchen den Überblick verloren. Vor einigen Jahren hatte ich mal die Ansage gelesen, daß es ein JitIntrinsicAttribute bzw. IntrinsicAttribute geben sollte, mit dem man Methoden für eine spezielle Optimierung durch den JIT-Kompiler markieren kann. Der sollte dann je nach verwendeter CPU SIMD-Anweisungen ausgeben, um den jeweils verfügbaren Befehlssatz (z.B. SSE) auszunutzen, und somit für eine bessere Performance zu sorgen.

Im Code der System.Numeric-Vector-Klassen habe ich das noch gefunden, allerdings ist das JitIntrinsicAttribute internal, und kann daher nicht für eigene Implementierungen verwendet werden.

Gefunden habe ich jetzt diese Anleitung: Hardware Intrinsics in .NET Core, wonach man die Optimierungen selbst für jeden SIMD-Befehlssatz selbst erstellen kann. Der Artikel ist aber auch schon über ein Jahr alt.

Die Idee, performance-relevante Methoden mit einem Attribut zu markieren, damit der JIT-Kompiler dort etwas optimieren kann, schien mir sehr vielversprechend. Aber jetzt alle wichtigen Methoden in allen relevanten Befehlssätzen neu zu implementieren müssen, scheint mir unverhältnismäßig mehr Aufwand zu sein.

Da ich viel mit 3D-Grafik zu tun habe, wäre die Kompilierung in CPU-spezifische Befehlssätze sehr sinnvoll. Und da ich meist mit eigenen Implementierungen von Vektor- und Matrix-Klassen arbeite, kann ich nicht (jedenfalls nicht immer) auf die Typen aus System.Numerics zurückgreifen.

Welche Möglichlichkeiten wird es denn in .NET 5 geben, um eigenen Code JIT-optimieren zu können? Vielleicht habe ich etwas übersehen?

30.09.2020 - 20:01 Uhr

Was du brauchst, ist ein ViewModel, das den aktuellen Status deiner Benutzeroberfläche repräsentiert. Dort gibt es dann eine Eigenschaft mit dem Status-Text, den du an deine StatusBar binden kannst.

Siehe [Artikel] MVVM und DataBinding

30.09.2020 - 18:19 Uhr

Warum willst du das Fadenkreuz selbst zeichnen? Dafür würde es doch ausreichen, den Mauscursor für die PictureBox zu ändern.

Ansonsten:
[Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)
[Tipp] Anfängerhinweis == true / == false

Den Hinweis von Th69 aus deinem letzten Beitrag solltest du beachten.

29.09.2020 - 15:34 Uhr

Das Problem ist spätestens mit der zweiten Antwort geklärt. Der OP hat sich bisher komplett geweigert, auf die Fragen zu antworten, die sich ergeben haben, und ist offensichtlich an einer Lösung nicht interessiert.

Wir müssen hier nicht weiter spekulieren, oder diesen Thread mit weiteren Mutmaßungen verlängern.

29.09.2020 - 15:29 Uhr

Sehr gut 😃 Aber dann ist die Frage, was du anders machst als in den Beispielen.

Daß jemand hier so etwas schon einmal umgesetzt hat, ist ziemlich unwahrscheinlich. Da mußt du schon ein paar Zeilen zu deinem Problem und deiner Lösung schreiben, damit man das als Außenstehender nachvollziehen kann.

29.09.2020 - 15:26 Uhr

@habib

Bitte beachte [Hinweis] Wie poste ich richtig?

1.1 Erst suchen und in die Doku schauen, dann posten
1.2 Nur ein Thema pro Thread

Ein Blick in die Doku hätte das Problem mit dem fehlenden "s" innerhalb von einer Minute gezeigt. Und bitte erstelle jeweils einen Thread pro Frage. Hier geht es um das Auslösen den Click-Ereignissen bzw. Commands, nicht um das Arbeiten mit der Zwischenablage.