Laden...

Forenbeiträge von winSharp93 Ingesamt 5.742 Beiträge

15.11.2012 - 20:03 Uhr

Hallo Norman9494,

so ganz ohne Code kann man da nicht allzuviel sagen...

Siehe als Lösungsansatz [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden

15.11.2012 - 20:01 Uhr

Ein kleines Gedankenspiel: Wäre die App so gestaltet, dass standardmäßig KEINE Nachrichtenquellen vorhanden sind, der Nutzer sie also manuell (per Link) hinzufügen muss: Was genau unterscheidet eine solche Applikation dann von einem Webbrowser mit aktiviertem AdBlocker?

Kritisch wird das ganze IMHO vor allem dann, wenn Werbung entfernt wird und stattdessen Werbung eines anderen Anbieters geschaltet wird (wie im Fall Google).

Ein "Recht" auf die Nutzung eines Adblockers hat man IMHO jedoch nicht: Auch Webseitenquelltexte sollten urheberrechtlich geschützt sein und ein AdBlocker nimmt daran Änderungen ohne Genehmigung des Urhebers vor - ich würde AdBlocker also höchstens in eine Grauzone stecken 😉
Siehe auch Spekulation: Werbeblocker in Browsern könnten nicht legal sein

15.11.2012 - 00:02 Uhr

Streaming Protokolle wie RTP basieren auf UDP, verhindern aber den Paketverlust, ohne, dass alle Pakete wieder geschickt werden, sondern nur das verlorene Paket.

Wobei dann aber der Kommunikationscode entsprechend angepasst werden muss, um genau diese Szenarien zu unterstützen - und das scheint der OP nicht gemacht zu haben.

Wie gesagt bin sehr neu in diesem Thema und hätte nicht erwartet das ein Switch mir Packete verschluckt...

Genau damit muss man in Netzwerken aber jederzeit rechnen; und gerade mit UDP führen Paketverluste eben dazu, dass die Daten dann gar nicht in deinem Programm ankommen.

Ich will vom Client Objekte verschicken die beim Server zu Bilder verarbeitet werden und angezeigt (Video)...

Da würde ich an deiner Stelle Ausschau nach fertigen Komponenten zum Videostreaming halten, z.B. Streaming over HTTP with JavaScript: AJAX video player oder Live c# video streaming webcam server and client

14.11.2012 - 23:44 Uhr

Hallo stes,

grundsätzlich: Hier im Forum können, wollen und dürfen wir keine Rechtsberatung geben. Konsultiere also für definitive Antworten bitte immer einen Anwalt.

Anhand der aktuellen Diskussion um Google-News (und vergleichbare News-Aggregatoren), bei der es ja nur darum geht, dass Google 2-Zeilige Ausschnitte (!) aus dem Artikel anzeigt und die Verlage vorwerfen, dass somit niemand mehr auf die eigentlichen Artikel klickt und die Werbeeinnahmen somit größtenteils zu Google fließen, kann ich mir nicht vorstellen, dass die Verlage so etwas gerne sehen würden.

Du kannst ja mal ein paar Verlage anschreiben; ich glaube jedoch kaum, dass die da grünes Licht geben...

Greife da besser auf die RSS-Feeds der Nachrichtenportale zu; diese werden ja speziell für die Darstellung in externen Anwendungen herausgegeben (und enthalten teilweise selbst Werbung, die von den Anbietern geschaltet wird).

14.11.2012 - 23:36 Uhr

Das sind alles Online-Lösungen und diese würden nicht funktionieren, wenn ich an einem Laptop ohne Internzugriff entwickeln würde? Sehe ich das richtig?

Naja - zum Arbeiten brauchst du jeweils kein Internet-Zugriff; nur zur Synchronisation.
Wenn also der eine Laptop zu keinem Zeitpunkt Internetzugriff hat, wird ein USB-Stick die einzige Möglichkeit bleiben.

TFS halte ich für eine Einzelperson dann doch etwas oversized (zumal es ja für Nicht-Studenten auch nicht gerade billig ist 😉 ); zudem ist man dann doch sehr auf VS festgelegt und kann nicht mal "schnell" ein Projekt in einer anderen Technologie mit dem eigenen Technologiestack umsetzen.

Ansonsten würde ich aber auch git empfehlen (gibt ein paar gratis Hoster, ich würde vor allem Bitbucket empfehlen, da man dort beliebig viele private Projekte kostenlos hosten kann).
Alternativ kannst du mittels "GitStack" selber was hosten (ist aber etwas hakeliger; siehe [Anleitung] GitStack einrichten ).

Lokal kannst du dann via TortoiseGIT und den Git Extensions für VS arbeiten.

Zum Sync brauchst du wie gesagt Internetverbindung, commiten, branchen usw. kannst du aber auch offline.

14.11.2012 - 12:17 Uhr

da das Laden der Datei ca 3 Sekunden länger Dauert als mit der List. Ich gehe davon aus das es daran liegt das die ObservableCollection bei jedem Add das Grid aktualisiert (stimmt das)?

Dann erzeuge in der Test-Methode einfach eine neue Collection, fülle diese, und weise sie danach der Property zu; dann findet nur genau eine Aktualisierung statt.

Eine ObservableCollection<> ist definitiv das richtige in diesem Kontext.
Und irgendwelche Workarounds braucht man auch nicht.

13.11.2012 - 00:00 Uhr

Nach dem Programmstart werden alle Assemblies in einem bestimmten Ordner geladen und es wird nach der Implementierung eines bestimmten Interfaces gesucht.

Blöde Frage: Warum legt ihr dann auch Assemblies in den Ordner rein, die nicht geladen werden sollen?
Oder anders gefragt: Werden alle Assemblies in dem Ordner gebraucht?

Wenn früher oder später eh' alle geladen werden sollen, spielt das quasi keine Rolle, wann man die lädt (bis auf die Startgeschwindigkeit).
Dauert die eigentliche Suche dann zu lang (gut möglich, wenn man Assembly.GetTypes verwendet), könnt ihr noch ein Attribut auf die Assemblies anwenden, die ihr durchsuchen möchtet und dann anhand dieses filtern.

12.11.2012 - 23:54 Uhr

Aus den genannten Gründen ein Tipp: Wählt ein Projekt, das man gut um Features erweitern bzw. schmälern kann und entwickelt dieses dann inkrementell (d.h. schrittweise).
Dann könnt ihr erstmal ein Minimalprojekt auf die Beine stellen (am besten schon dokumentieren usw., wenn das auch zur Aufgabe gehört) und hättet - wenn euch die Zeit partout nicht reicht - schon einmal etwas zum Abgeben. Reicht euch die Zeit hingegen gut, sind ja quasi kaum Grenzen gesetzt, was ihr noch alles aufnehmen könnt.

Beispiel Taschenrecher: Fangt erst einmal mit den Grundrechenarten an und erweitert dann, wenn noch Zeit ist, nacheinander die weiteren Funktionen.
Das Prinzip sollte sich jedoch auf viele Projekte übertragen lassen.

Zum Thema Spiel: Bedenkt, dass da vermutlich ein Großteil der Arbeit für Design (grafisch, sowie spielmechanisch) draufgehen wird - das kann je nach Situation gut oder schlecht sein, man sollte sich dessen aber im Klaren sein 😉

11.11.2012 - 22:33 Uhr

Hallo akoh,

warum nimmst du überhaupt UDP, wenn keine Pakete verloren gehen dürfen?!?
Hierzu Wikipedia:

IP löscht Pakete etwa bei Übertragungsfehlern oder bei Überlast. Datagramme können daher fehlen. UDP bietet hierfür keine Erkennungs- oder Korrekturmechanismen, wie etwa TCP. Im Falle von mehreren möglichen Routen zum Ziel kann IP bei Bedarf neue Wege wählen. Dadurch ist es in seltenen Fällen möglich, dass später gesendete Daten früher gesendete überholen. Außerdem kann ein einmal abgesendetes Datenpaket mehrmals beim Empfänger eintreffen.

Willst du das wirklich? Was spricht gegen TCP?

Was macht denn deine receivefrom-Methode?
Evtl. blockiert die ja.

Deine Paketgröße von knapp 43kB scheint mir auch recht groß gewählt; soweit ich weiß, wird das Paket dann gesplittet übertragen (kA, was genau passiert, wenn dann eines der Teilpakete verloren geht).

oder daran dass die Zeitscheiben eben nicht "richtig" verteilt werden.

Aha - mal wieder einen Bug in Windows entdeckt...

11.11.2012 - 22:24 Uhr

Hallo moelski,

wenn du deine Tabellen ordentlich normalisierst und evtl. noch den einen oder anderen View anlegst, solltest du so schnell keine Performanceprobleme kriegen.

Wenn die Anzahl der Messgeräte überschaubar ist (und sich nicht groß ändern wird(, kannst du gut mit mehreren Tabellen arbeiten.
Das Anlegen kannst du dann auch einem O/R-Mapper (wie z.B. NHibernate) überlassen; damit geht das recht transparent und theoretisch auch in einer Plugin-Struktur.
Dabei kannst du auch Vererbung nutzen (bietet NHibernate verschiedene Möglichkeiten, das zu mappen).

Wenn ich jetzt die Datenpunkte für Temp lesen will dann kann ich das zwar machen indem ich jeden dritten Wert lese. Aber ich müsste danach die Datenpunkte für Feuchte und danach für Regenmenge lesen. Sprich ich muss jede Kurve einzeln auslesen.

Sollte mit SQL ja kein Problem sein, die entsprechenden Werte rauszufinden.

Wenn du das ganze wirklich generisch lösen willst (wobei das quasi schon wieder in Richtung Anti-Pattern DB in DB läuft), würde ich eine DB-Struktur in folgender Richtung wählen:


Geräte([U]Id[/U], Name, Beschreibung)
Wertetypen([U]Id[/U], GeräteId, Name)
Messungen([U]Id[/U], Datum)
Messwerte([U]MessungId[/U], [U]WertetypId[/U], Wert)

11.11.2012 - 22:14 Uhr

Ich glaube auch nicht, dass der Server wirklich auf die Sekunde genau 60 Sekunden Wartezeit verlangt (bspw.. durch DateTime Ungenauigkeiten in der Datenbank usw.); 1-3 Sekunden Offset sind IMHO das einzig zweckmäßige, was man halt in Kauf nehmen muss.

11.11.2012 - 22:09 Uhr

Bei C# und Java hat man mit vollkommen unterschiedlichen Bibliotheken

"Vollkommen unterschiedlich" würde ich in keinem Fall unterschreiben; grundlegend sind die schon recht ähnlich (Collections, Streams, grundlegende Datentypen, usw. sind in beiden recht ähnlich aufgebaut). Und ob ich jetzt GetHashCode oder hashCode aufrufe, ist recht egal - wichtig ist, dass alles von Object ableitet und folglich so eine Methode anbietet (wenn auch in Java mit Ausnahme der Primitiven Typen).
Und auch bei externen Bibliotheken hat man halt Hibernate / NHibernate; JUnit / NUnit, usw. 🙂

Ich sehe darin überhaupt kein Problem, im Gegenteil: Je mehr Programmiersprachen du kennst, desto mehr hast du einen Blick über den Tellerrand und verbesserst damit deine (sprachunabhängigen) Programmierfähigkeiten.

Im Prinzip stimme ich da zu.

Gerade zu Beginn kann das parallele Beschäftigen mit zwei Programmiersprachen IMHO jedoch einen deutlich erhöhten Aufwand darstellen, dessen man sich in jedem Fall bewusst sein sollte.
Evtl. kann es da also sinnvoll sein, sich erst einmal der einen Sprache zu widmen, bis man diese (zumindest einigermaßen) beherrscht und erst später eine weitere Sprache in Angriff zu nehmen.

Die Ähnlichkeit von Java / C# sehe ich in diesem Kontext dabei sogar eher problematisch: Wenn man noch keine der beiden Sprachen wirklich "drauf hat", steigt das Risiko von Verwechslungen gewaltig; bei zwei verschiedenen Sprachen hat man das eher weniger.

Insbesondere mit Blick auf Klausuren sollte man das nicht unterschätzen: Die sind (leider!) meist nach dem Schema "Wie lautet Signatur der Methode X von Klasse Y? Trage die fehlenden Klassennamen in die Hierarchie ein" usw. aufgebaut, wo man dann weniger Punkte für's Verständnis, sondern mehr für's Auswendiglernen kriegt. Aber gut, muss man sich wohl damit abfinden...

Mein Rat daher: Wenn du viel Zeit hast, kannst du durchaus beide Sprachen parallel beginnen.
Ich würde aber eher dazu raten, dich auch privat erst einmal etwas mit Java zu beschäftigen (das, was ihr im Unterricht macht, anhand ein paar kleinerer Programme zu Hause vertiefen oder ein Java-Buch selber durchgehen; je nach Lehrer). Damit solltest du (programmiertechnisch) - glaube ich - genug ausgelastet zu sein 😉

11.11.2012 - 21:51 Uhr

dass sich PDFs auf dem Kindle besser lesen lassen

Meiner Erfahrung nach kann man PDFs auf dem Kindle eher vergessen; klar: Sie werden dargestellt, aber da PDFs meist recht "ungeschickt" für diese Displaygröße gestaltet sind, ist man quasi nur am Scrollen (Besten Beispiel: Der Text ist im A4 Format in mehreren Spalten angeordnet; dann kann man den Kindle quer nehmen, zoomen und sieht dann entweder Ober- oder Unterseite des Blattes. Aufgrund der Spalten muss man dann aber je Spalte zweimal scrollen). Scrollen / Zoomen funktioniert dabei (displaybedingt) leider auch nicht wirklich flüssig, wie man das von Tablets / Smartphones her kennt.

Das hat bei mir dazu geführt, dass ich den Kindle nur noch zum Lesen von "echten" eBooks (mit flexiblem Layout) verwende - damit kann er seine Stärken wirklich ausspielen.
Konvertieren ins mobi-Format klappt auch eher schlecht; die besten Ergebnisse hatte ich aber mit dem FineReader von Abby (ist allerdings nicht ganz billig; den also extra wegen soetwas anzuschaffen, rentiert sich also nicht).
Billiger geht's mit Briss (PDF so zuschneiden, dass Header usw. weg sind) und dann mit Calibre oder Mobipocket Reader konvertieren. Aber naja - da nimmt man dann lieber gleich das iPad zur Hand und liest halt drinnen - dann stimmt auch die Formatierung deutlich besser 😉

08.11.2012 - 20:00 Uhr

Google frustriert, da zumeist von aktuelleren WindowsPhones die Rede ist

Dann such mal nach "Windows Mobile" bzw. "Windows CE", das sollte die korrekte Bezeichnung sein.

Siehe z.B.: Play Sound on Windows Mobile 5

21.09.2012 - 21:52 Uhr

Scheint es aber leider nicht zu geben.

Doch - aber nur am 1.4.: Eric Lippert: Compound Assignment, Part Two 😉

02.09.2012 - 13:04 Uhr


>

Setzt du (oder jemand) das ein und hat da schon ein paar Erfahrungen?

01.09.2012 - 22:56 Uhr

Hallo zusammen,

da ich per PN darauf angesprochen wurde und denke, dass es vielleicht für andere auch interessant ist, hier grob die Schritte, um GitStack (ein Server für das Versionsverwaltungssystem git) unter Windows Server (2008 R2) neben IIS zum Laufen zu bringen:1.Sicherstellen, dass Port 80 nicht belegt ist: IIS beenden und diverse andere Dienste wie SQL Reporting Service, Windows Remote Management, ... beenden - zwischendurch mit netstat -a prüfen, ob man alle hat 1.GitStack installieren (am besten in den vorgegebenen Ordner) 1.Wenn kein Zugriff auf die Configseite: Sichwerstellen, dass der Dienst "GitStack" läuft; Fehler beim Start sind recht sicher auf einen belegter 80er zurückzuführen 1.In der Konfiguration ein Password vergeben und den Port ändern 1.Firewall (und evtl. Portfreigabe des Routers) entsprechend konfigurieren 1.(IIS + andere Dienste wieder starten) 1.Benutzer anlegen (kein Backslash im PW verwenden!) 1.Repositories anlegen, wie unter http://gitstack.com/import-an-existing-repository/ gezeigt (dabei keine Bare-Repositories verwenden) 1.Benutzer den Repositories hinzufügen 1.Wie in Git - How to use .netrc file on windows to save user and password gezeigt, eine "_netrc" Datei auf dem Client-Rechner anlegen, in dem der Benutzernamen und das Passwort hinterlegt sind 1.Für HTTPS-Support bei Self-Signed Certificate (ist default): Wie in Git ssl error on windows gezeigt, die Zertifikatprüfung auf dem Clientrechner abstellen (nur für LAN empfehlenswert) und die entsprechende Option aktivieren (und auf den richtigen Port achten!) 1.Per TortoiseGit (oder Kommandozeile) auschecken

Die Anleitung ist dabei nicht als vollständig oder ausführlich anzusehen und recht spezifisch für meine Situation, und dient somit mehr als Checkliste - ich hoffe aber, dass ich damit jemandem in einer ähnlichen Situation wie ich es war ein wenig Herumprobiere ersparen kann 😉

01.09.2012 - 19:42 Uhr

Für alle mit ähnlichen Problemen:
Letztlich habe ich mich für Windows Live Mesh (bzw. Live Sync) entschieden, welches auch noch LAN-Sync ohne Cloud-Sync unterstützt.
Ist zwar eher für den Desktop-Einsatz gedacht, mit AutoLogon und einem Eintrag im Task-Scheduler läuft es aber auch auf dem Server rund (allerdings halt nur für einen User, aber das stört mich ja nicht 😉 ).
Für den mobilen Zugriff habe ich eine WebDAV-Freigabe (sowie eine SMB-Freigabe als Alternative für Zugriff via VPN oder direkt im LAN) auf den entsprechenden Ordner eingerichtet; der Server ist unter einer eigenen Domain erreichbar.

Ich hoffe mal, das die Live Sync Server so schnell nicht abgeschaltet werden (SkyDrive ist ja Nachfolger...) - diese werden weiterhin benötigt, damit sich die Clienten finden.

Gebackupt wird der ganze Server über Crashplan in der Cloud - komplett verschlüsselt und mit unbegrenztem Speicherplatz für unter 5€/Monat (ist IMHO mehr als in Ordnung).

Ansonsten kämpfe ich noch damit, einen Git-Server auf dem Rechner einzurichten, aber das ist ein anderes Thema 😉
[EDIT]Siehe [Anleitung] GitStack einrichten[/EDIT]
Wenn das geht, folgt dann noch eine TeamCity Installation.

Und wenn der Server gerade nichts zu tun hat (ist ja die meiste Zeit der Fall), läuft noch ein BOINC-Client (energietechnisch macht das keinen Unterschied, da der verbaute Prozessor im Leerlauf eh nicht runtertaktet...).

Meine Mails / Kalender werden wohl weiterhin bei Google liegen, da ich keinen Mailserver gefunden habe, der Mails quasi nur weiterleitet und nicht selbst eine eigene Domäne für Mailversand benötigt - und die zu pflegen, ist mir (aufgrund fehlender IP-Adresse im nicht SPAM-geblocket Bereich) nicht möglich.

Wer also dahingehend (oder in Richtung weiterer Einsatzmöglichkeiten) noch Vorschläge hat, gerne her damit 😉

27.08.2012 - 09:39 Uhr

Aber das ist doch Unfug!

Nicht unbedingt:

Nun wird der Abonnent doch nicht informiert, wenn sich CanExecuted seines RelayCommands verändert, sondern er wird immer informiert, wenn irgendein CommandManager die static Requery abfährt, mit der das CanExecute aller möglichen Commands eruiert wird

...und das ist z.B. auch der Fall, wenn sich eine gebundene Property ändert usw.
Ohne diese Vorgehensweise müsste man sich komplett selbst um die Auslösung des Events kümmern - das kann man zwar machen, ist aber ein erheblicher Mehraufwand.

Den kann man sich (mit vertretbaren Kosten der Performance) aber leicht sparen.

Probiere es testweise mal mit einem kleinen Beispiel, in dem du eine Textbox und ein Button an ein ViewModel bindest und CanExecute des Commands vom Button prüfen lässt, ob der Text nicht leer ist.
Dann ändere den Text und du siehst die Auswirkungen dieser Implementierung.

24.08.2012 - 14:39 Uhr

Hallo mathis1112,

herzlich willkommen hier auf myCSharp.de!

Vorgehen: Nicht die ID direkt ermitteln, sondern den Index der Id; alles weitere siehe [Snippet] Zufallszahlen, die sich nicht wiederholen

24.08.2012 - 13:45 Uhr

Hallo M@TUK,

ne - ein dedizierter Multitouchmonitor kommt mir nicht ins Haus 😉

Bzgl. Laptop hatte ich mal unter Windows 7 eins mit Multitouch (ein Convertible), aber das war aus verschiedenen Gründen (Bedienbarkeit, Akkulaufzeit, Geräusch, Gewicht) nicht so ganz das Wahre.
Ich glaube nicht, dass ich in Zukunft einen Laptop mit Multitouchdisplay kaufen werde - auch nicht für Windows 8.

Multitouch ist IMHO ganz nett für "Wohnzimmeranwendung", d.h. zum Surfen, mailen, spielen. Aber dafür hab' ich ein Tablet.
Und in die Richtung klingt dann das Surface-Tablet ganz interessant - wenn darauf auch irgendwann VS und nicht-Store-Apps laufen sollten, wäre das eine echte Alternative zu einem Laptop.

Für einen "normalen" Laptop würde ein Multitouchdisplay allerdings für mich keinerlei Vorteile bringen - und wirklich ergonomisch wäre das ganze auch nicht.
Da bleibe ich lieber bei meinem Multitouchtrackpad, das dank OSX auch wirklich einen echten Mehrwert bringt (u.a. Zweifingergesten zum Scrollen und zum Navigieren, Dreifingergesten zum Wechsel zwischen Anwendungen).

Insofern fehlt mir im Moment auch noch ein wenig die richtige Begeisterung für Windows 8 - sobald ich wieder Zugriff auf eine schnellere Leitung habe, werde ich es aber mal in einer VM antesten, um zu prüfen, ob die Performancevorteile und sonstigen Verbesserungen das neue Bedien"konzept" ausgleichen können.

Den Aufpreis würde ich lieber in ein besseres Panel, einen größeren Monitor oder - wenn es denn nun wirklich eine Spielerei sein muss 😉 - in 120Hz (und damit 3D-Funktionalität) investieren.

23.08.2012 - 13:11 Uhr

dass ich nicht jeden Entwicklungsstand, den ich testen möchte, auch zentral freigeben möchte.

Du sollst ja auch nicht deinen Entwicklungsstand kopieren, sondern den aktuellen Stand des Netzlaufwerkes auf deinen Rechner bzw. in ein separates Verzeichnis.

Wenn ihr - wie man das aus deiner Beschriebung ableiten könnte - tatsächlich nur eine Instanz der Anwendung "für alle" haben solltet, sind derartige Probleme natürlich vorprogrammiert.

23.08.2012 - 13:05 Uhr

Hallo xdaniel,

auch wenn man dafür im Normalfall Quellcodeverwaltungen und Librarymanager einsetzt, kannst du dafür das Postbuild Event von VS in Kombination mit robocopy missbrauchen.

23.08.2012 - 10:54 Uhr

So wie ich thetruedon verstanden habe, soll es sich durchaus um eine "echte" Invariante handeln, da die entsprechenden Bedingungen immer erfüllt sein sollen.

Die Realisierung als öffentliche Methode Invariant, welche dann von einem Test explizit aufgerufen wird, scheint mir eher eine Art Umweg, um die Invariante sicherstellen zu können.
Ohne Programmierfehler müsste diese somit immer true zurückliefern (womit sie natürlich in einer öffentlichen API keinen Sinn macht).

Könnte die "Invariante" auch false liefern, wäre sie eben gerade keine mehr.
Stattdessen würde es sich wie von FZelle angemerkt, um eine Validierung handeln.

Und wirklich "unverändert" ist doch die Collection nicht.

Das sollte damit nichts zu tun haben; solange die Bedingungen der Invariante immer zutreffen (d.h. diese "unveränderlich" stimmen), kann sich die Collection quasi beliebig ändern.

Die Lösung mittels Code-Contracts ist also hier schon die richtige; im Test müsste man dann nur sicherstellen, dass keine Exception aufgrund einer Invariantenverletzung geflogen ist.

23.08.2012 - 10:47 Uhr

Evtl. klappt es, Size zu überdecken (mittels new) und das DesignerSerializationVisibilityAttribute mit Parameter Hidden auf den Button anzuwenden.

23.08.2012 - 09:17 Uhr

Hallo SeCuRiiTaS,

siehe [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt - nimm einen Debugger (bzw. ein ordentliches Errorlogging) und du findest heraus, wo genau das Problem liegt.

Damit sollte alles gesagt sein ==> Geschlossen

23.08.2012 - 09:13 Uhr

Hallo rakrom,

herzlich willkommen hier auf myCSharp.de!

Gibt es eine (einfache) Möglichkeit, die Puffergröße der TextBox festzulegen, so dass nicht irgendwann der Arbeitsspeicher vollläuft?

Mit Puffergröße hat das nichts zu tun; mit jedem AppendText wird der String länger.

Binde besser eine ObservableCollection an eine (virtualisierte) Listbox.
Die ObservableCollection kannst du dann entsprechend in ihrer Größe begrenzen.

22.08.2012 - 11:36 Uhr

gibt es für solche Sachverhalte eine "Best Practis Map" oder einen allgemeinen "Leifaden" mit Code-Beispielen?

Diesen gibt es und er nennt sich Erfahrung 😉

Solche "Leitfäden" gibt es sicherlich zu Haufe, allerdings werden dir diese nicht wirklich etwas nützen, da du nicht überprüfen kannst, ob die Vorschläge darin auch sinnvoll sind.

Zudem existieren für verschiedene Aspekte unterschiedliche, vollkommen legitime Sichtweisen (z.B. Namenskonventionen für private Felder).
Somit kann auch niemand den Anspruch erheben, einen "Allgemeinen Leitfaden" entwickelt zu haben.

Folglich kannst du nur nach Vorschlägen und Sichtweisen suchen und dir deinen eigenen Leitfaden schreiben. Diesen kannst du dann kontinuierlich weiterentwickeln, wannimmer du der Ansicht bist, in Zukunft etwas besser anders zu lösen.

21.08.2012 - 13:16 Uhr

Statt Array wohl eher ein Dictionary<string,Regex>

Kommt drauf an, ob man einen Cache bauen will oder eine Liste von Replaceoptionen, die durchgeführt werden soll 😉

21.08.2012 - 12:14 Uhr

Hallo Coooder,

welche Technologie setzt du zum Mailversand ein?

20.08.2012 - 11:39 Uhr

Hallo bigeddie,

prinzipiell keins von beidem, sondern IList<Foo> 😉

Da du aber von Form sprichst und dich somit im Umfeld von Controls bewegst, wirst du wohl Variante 2 nehmen müssen, da der Designer Probleme mit generischen Listen hat.
Allerdings würde ich die Klasse dann FooCollection nennen.

15.08.2012 - 14:45 Uhr

Hallo Abt,

evtl. Sync Toy bzw. das MS Sync Framework; unterstützt anscheinend auch inkrementelle Synchronisierung (wobei ich mir nicht sicher bin, ob auf Datei-Ebene oder auf Inhaltsebene)?

15.08.2012 - 14:36 Uhr

Wie in Arbeitet ihr mit/in virtuellen Maschinen? geschrieben, halte ich die Idee prinzipiell für gar nicht so schlecht, wenn es technisch gut umgesetzt ist (automatische Updates, stabile Netzwerkverbindung usw.)
Letztlich kann es sich ja sogar positiv auf die Performance auswirken, wenn der Hostrechner "üppig" mit Hardware ausgestattet ist (ich denke da an SSD-Raids usw.).

Vorteil sehe ich vor allem darin, dass man auch während eines Reboots weiterarbeiten (Mails, Chat, usw.) kann, wenn man mehrere VMs zur Verfügung hat bzw. der Clientrechner noch einigermaßen Resourcen zur Verfügung stellt.
Videos kann man dann zur Not ja auch auf dem Host anschauen; das schaffen ja inzwischen sogar Atom-CPUs.

14.08.2012 - 15:54 Uhr

Probier's mal mit How to get main window handle from process id? und loope über alle Fenster (so ähnlich hab' ich's damals IMHO auch gemacht).

14.08.2012 - 15:52 Uhr

wurde dieses Fenster entfernt? Habe es auf einem Screenshot gesehen, bei mir ist es aber nicht vorhanden (während debugging).

Naja - das sind halt die Nebenwirkung einer anpssbaren IDE; man kann sie halt so anpassen, dass man weniger produktiv ist als in der Standardeinstellung (die man übrigens einfach wiederherstellen kann).

14.08.2012 - 14:01 Uhr

Hallo Console32,

ich meine mich zu erinnern, ein ähnliches Problem mal durch Polling gelöst zu haben:
Mittels Timer jede Sekunde das Aktive Fenster des Prozesses ermitteln und wenn es eins gibt (ggf. noch den Titel prüfen, ob es sich um eine Fehlermeldung handelt) entsprechend abschießen.

Eleganter wäre vermutlich noch ein Hook, mit dem du dann verhindern könntest, dass die Messagebox überhaupt angezeigt wird; dafür benötigst du jedoch IMHO erhöhte Rechte.

13.08.2012 - 10:13 Uhr

ab wann für den normalen Betrachter ein Pixel rot ist und wann eher weiß?

Das hängt auch stark von der Umgebung ab; das menschliche Auge (bzw. die Verarbeitung im Gehirm dahinter) ist recht komplex. 😉

Insofern wirst du dich für eine definitive Lösung (und ich bezweifle, dass eine solche überhaupt existiert), sehr intensiv mit Biologie auseinandersetzen dürfen.

Beachte z.B. die folgende Optische Täuschung von Edward H. Adelson (A und B haben denselben Farbwert; trotzdem erscheint A schwarz und B eher weiß):

09.08.2012 - 11:16 Uhr

Kann man auch nicht den Zustand eines einzelnen Events abfragen nach einem eventuellen Timeout?

Du kannst auf alle nacheinander mit einem sehr geringen Timeout warten - das klappt aber natürlich nur bei ManualResetEvents.
Ansonsten kannst du einfach zusätzlich ein boolsches Flag mitführen.

Vermutlich ist die Verwendung von Tasks aber doch das richtige für dich.

09.08.2012 - 11:14 Uhr

Hallo Squizzer,

bzgl. der Synchronisation zwischen Model und ViewModel kannst du z.B. ein Event CurrentTrackChanged in Player bereitstellen.

08.08.2012 - 19:37 Uhr

Hallo okrimize,

da die Effekte im Normalfall von der Grafikkarte berechnet werden, nehme ich an, dass der Treiber da gewisse Optimierungen durchführt, die letztlich auch die Schärfe beeinflussen können.
Versetze mal die Anwendung in den Softwarerenderingmodus (gibt's einen Registry-Switch dafür, danach den PC neustarten).

Ansonsten kannst du auch mal probieren, deinen Grafikkartentreiber entsprechend umzukonfigurieren.

//EDIT: Bei mir kann ich das ganze nicht reproduzieren (NVidia GTX 460, 1GB VRAM).

06.08.2012 - 18:32 Uhr

Was denkst du denn über das Mainboard? Das ist die Komponente gewesen, bei der ich echt ein wenig überfragt war ...

Das geht mir ähnlich 😉
Wichtig beim Mainboard ist vor allem ein namhafter Hersteller (MSI, Asus, Gigabyte, ...), damit nicht gerade die billigsten Kondensatoren verbaut sind.
Ansonsten kann man quasi das günstigste nehmen, das die Anforderungen an die Schnittstellen erfüllt (also Anzahl USB 3.0, Anzahl USB 2.0, Anzahl PCI, ...).

Auch gibt es Unterschiede beim verbauten Chipsatz; bei den Ivy Bridges kommen da der Z75, der Z77 sowie der H77 infrage.
Die Unteschiede bei denen scheinen recht gering zu sein, wenn man nicht allzu spezielle Anforderungen hat (gibt Vergleichstabellen im Internet; da müsste ich mich jetzt auch eine Weile einlesen).

Worauf man leider vor dem Kauf nicht achten kann, sind Dinge wie Startzeit des BIOS (IMHO extrem wichtig); ich hatte damals Pech und warte jetzt länger auf das BIOS als auf Windows...
Evtl. also mal in ein paar Hardware-Foren stöbern oder gezielt nachfragen.

Zum Thema Geräusche: Im Idelfall kann man dann für die HDD noch einen Antivibrationsrahmen dazunehmen (sofern das Gehäuse diesen nicht überflüssig macht).

Noch ein Punkt: Einen (oder zwei) Gehäuselüfter würde ich noch einbauen (lassen); das senkt dann die Temperatur im Gehäuse und somit auch die Lautstärke der Graka- / CPU-Lüfter und erhöht nebenbei die Lebenserwartung der Komponenten.
Und bereits für unter 10€ kriegt man Lüfter, die recht leise arbeiten.

06.08.2012 - 16:48 Uhr

Hallo Phoenixwiger,

herzlich willkommen hier auf myCSharp.de!

So etwas sollte sich mit WMI erledigen lassen; die zugehörigen Klassen sind wohl Win32_PageFileSetting und Win32_PageFileUsage

06.08.2012 - 13:41 Uhr

Welche Komponenten würdet ihr ggf. durch welche ersetzen?

Den Prozessor würde ich evtl. gegen einen i5-3570K tauschen; der sollte leistungstechnisch dem i7er nicht allzusehr nachstehen, ist aber knapp 70€ billiger.

Einen Prozessorkühler für 50€ scheint mir auch etwas teuer, wenn du nicht wirklich auf die Jagd nach Übertaktungsrekorden gehen möchtest; da würde ich im Bereich um die 30€ Ausschau halten.
Aber schlecht wird der gewählte vermutlich nicht sein; bequiet ist durchaus für ordentliche Produkte bekannt.

Zum Thema Grafikkarte würde ich fast noch ein Weilchen warten und im Moment erst einmal die vom alten Rechner nutzen; die GTX 660 TI scheint unmittelbar bevor zu stehen. Die von dir verbaute GTX 570 ist ja schon seit ca. Anfang 2011 im Handel. Dann sollte die entweder billiger werden oder du nimmst gleich die 660er.

Festplatte hast du bewusst ausgelassen?
128GB SSD ohne zusätzlichen Speicher sind IMHO dann doch etwas wenig (bei mir nimmt alleine der Steam-Ordner mehr als ein halbes TB ein 😉 ).

05.08.2012 - 22:37 Uhr

Hallo

dazu kannst du - wie in How to bind to attached property in XAML, WPF vorgeschlagen - ein Behavior verwenden.

Alternativ siehe auch Pushing read-only GUI properties back into ViewModel

05.08.2012 - 22:29 Uhr

Das Prinzip von MVVM ist ja, wenn ich es richtig verstanden habe, Code und Design bzw. Anzeige und Verarbeitung voneinander zu trennen.

Ich würde es ein wenig anders formulieren: Die Trennung von Oberfläche(-ndesign) und Verhalten / "Code" der Anwendung ist ein Ziel, dem man mithilfe von MVVM ein großes Stück näher kommen kann.
Prinzipien von MVVM sind dabei Templating, DataBinding und die Idee, (vereinfacht gesagt) für jedes Control bzw. jede View ein sogenanntes "ViewModel" zu erstellen, welches das komplette Verhalten des Controls steuert.

Wie sollte ich nun aber vorgehen, wenn ich z.B. eine Updaterfunktion implementieren möchte.

Allgemeine Aufgaben, Initialisierungen usw. kannst du in der App-Klasse (Codebehind der App.xaml) durchführen.
MVVM kommt im Allgemeinen nur im Zusammenhang mit UIs zum Einsatz.

Wie implementiert man Konfigurationsmöglichkeiten? Muss man hierfür auch ein Objektmodell und entsprechende Viewmodels etc. aufbauen?

So pauschal kann man das nicht beantworten; im Allgemeinen kann aber das ViewModel entsprechend auf Konfigurationsschalter reagieren (und somit auch die entsprechende View beeinflussen).
Zudem können spezielle Views (natürlich mit dahinterliegenden ViewModels) existieren, die Änderungen an der Konfiguration erlauben.

Wie gehe ich vor, wenn eine Checkbox an bestimmte Felder (z.B. Bools) "gebunden" ist, wenn man keine Ereignisbehandlungen benutzen soll/darf/will.

Genau dafür ist Databinding da: Die Checked-Property einer Checkbox wird an eine ViewModel-Property gebunden und dieses leitet den Wert entsprechend weiter (z.B. direkt oder erst nach weiteren Aktionen wie z.B. den Klick eines Buttons).

gibt es eine gute, detailliertere Einführung in dieses Thema im Internet zu finden?

Siehe z.B. Suche WPF für Windows Forms Entwickler

05.08.2012 - 22:29 Uhr

Auch wenn ich es nicht gelesen habe, gibt es noch das Buch Advanced MVVM von Josh Smith

05.08.2012 - 22:07 Uhr

Da das meiste bereits gesagt ist, noch einige Ergänzungen von mir:

Schlussendlich muss er ein 5.1-Soundsystem unterstützen.

Hier sollte man wissen, dass quasi kaum ein Mainboard 5.1-Live-Encoding unterstützt. Dieses wird aber benötigt, um "live erzeugtes" Audio (wie es etwa Spiele im Gegensatz zu Blurays/DVDs liefern) per Coax bzw. Toslink an den AV-Receiver zu schicken.
Zwar kann man immer noch analog verwenden (3 herkömmliche Stereo-Cinchkabel), aber man sollte sich dessen bewusst sein und evtl. den Einbau einer entsprechenden dedizierten Soundkarte in Erwägung ziehen.

Oder ist der Preis für diese Konfiguration angemessen?

Generell bin ich immer etwas skeptisch, was fertige Konfigurationen angeht; suche auch mal einen lokalen Fachhändler auf und lasse dir einen Rechner (mit Gewährleistung usw., was man beim Eigenbau nicht hat) zusammenstellen; teilweise ist der Preis doch deutlich niedriger, als man das so annimmt.
Zudem scheint mir 550Watt-NT für einen Gaming Rechnern (in Angesicht evtl. Aufrüstungen) durchaus etwas schwach bemessen.

(Edit: sehe gerade ist eine OCZ, die ist sogar leicht teurer)

Mit OCZ habe ich persönlich sehr schlechte Erfahrungen gemacht; OCZ kauft soweit ich weiß Flash-Chips von Drittherstellern zu. Je nachdem, welcher das gerade ist, kann man also Pech oder Glück haben.
Würde bei mir der Kauf einer neuen SSD anstehen, würde ich zu Intel oder Samsung tendieren.

muss es eine 240GB SSD sein? Für System reicht locker eine 128GB (nimm die Samsung 830. Top Teil)

Vor dem Hintergrund, dass man die 256er SSDs teilweise für unter 180€ kriegt, halte ich das nicht für allzu verkehrt; alleine die Auslagerungsdatei frisst ja im Normalfall schonmal 8-16GB, das gleiche geht nochmal für die Ruhezustandsdatei drauf usw.
Klar - kleiner reicht auch (ich habe im Laptop ausschließlich eine 128er verbaut und im Desktop reicht mir eine 60er + HDD); aber größer schadet nie 😁

(Crysis 2 auf voller Auflösung

"Volle Auflösung" ist sehr vom Monitor abhängig :evil:
Wenn du "nur" FullHD willst, schaffen das schon recht viele Karten; bei 4K wird's extrem dünn 😁
Preis-Leistungstechnisch kann man sich bei Grakas so an 150-250€ orientieren; darüber ist die Mehrleistung/€ recht gering; darunter hat man meist ältere Modelle oder schlichtweg schwache.

Gibt es einen Grund, weshalb du eher auf NVidia als auf AMD setzen würdest?

In der Vergangenheit hatte AMD häufig Probleme mit Treibern; inzwischen scheint das aber nicht mehr so problematisch zu sein.
Allerdings sind die NVidia-Karten in der aktuellen Generation effizienter als die von AMD und bieten teilweise z.B. auch eine Art TurboBoost.
Wer's braucht hat bei NVidia zudem deutlich bessere Stereoskopieunterstützung.

Der i7 3770 ist ne Ivy Bridge

Auch wenn ich derzeit nicht wirklich den Durchblick durch den aktuellen Stand auf dem Prozessormarkt habe, sind i7er tendenziell eher recht teuer und bieten im Vergleich zu den deutlich günstigeren i5ern oft nur recht wenig Mehrleistung.
Ich würde da mal ein paar Vergleichstabellen bemühen (inkl. Preisangabe), aber schon zu einem IvyBridge greifen (aufgrund der besseren Effizienz etc.).

27.07.2012 - 18:30 Uhr

Mein Ziel wäre es, beim Start des Dialoges den Text Pflichfeld neben der Textbox stehen zu haben, der verschwindet, sobald eine Einfabe erfolgt.

Das kannst du im Prinzip auch mit einem Trigger realisieren, der das Feld einblendet, sobald der Text leer ist.

Validieren würde ich dann - wie Quaneu bereits meinte per IDataErrorInfo bzw. sobald der User dann auf "Ok" klickt.

27.07.2012 - 18:28 Uhr

Das hieße es würde nur über Events möglich sein...

Ja, im Prinzip reicht sogar PropertyChanged, wenn das TreeViewModel diese SelectedItem Eigenschaft selbst bereitstellt und sich um deren Aktualisierung kümmert (und dazu wiederrum PropertyChanged der Children abonniert).
Behilflich kann dir dabei z.B. BindableLINQ bzw. Obtics sein, die quasi ein "LINQ To Observable" bereitstellen.

27.07.2012 - 17:35 Uhr

Hallo Quaneu,

Doch bisher weiß nur das ViewModel für die Person, dass es selektiert ist und eben nicht das ViewModel des Fensters, dass dann die entsprechenden Aktionen ausführt.

aber das ViewModel des Fensters sollte sicherlich irgendwie Zugriff auf das ViewModel mit den Personen haben.

Insofern gilt (im MainViewModel):


var selectedItems = this.TreeViewModel.Persons.Where(p => p.IsSelected);

Noch besser wäre natürlich, wenn das TreeViewModel selbst diese Selektion verwaltet (kann sogar recht generisch erfolgen) und auf Änderungen der IsSelected Property der Items lauscht.