Laden...

Forenbeiträge von winSharp93 Ingesamt 5.742 Beiträge

27.01.2014 - 18:34 Uhr

"Reguläres" Geld hingegen hat einen realen Gegenwert, sodass dieses einer gewissen Inflation unterliegt.

Auch nicht allzu realer als Bitcoin: Fiatgeld / Mindestreserve-System 😉

Wobei ich die Garantie eines Staates / einer Staatengemeinschaft immer noch deutlich höher schätze als die einzelner Individuen.

26.01.2014 - 22:50 Uhr

Hallo zusammen,

das europäische Überweisungssystem scheint doch in vielerlei Hinsicht einmalig auf der Welt zu sein.

Versicherungen per Lastschrift? Miete per Dauerauftrag? Kauf auf Rechnung und anschließende Zahlung per Überweisung?
In USA / China kann man davon nur träumen (als Europäer in einem der beiden Länder). Als kostenfreie Zahlungsmöglichkeit bleiben da nur Checks oder vor allem Bargeld.
Insofern kann ich durchaus verstehen, dass der Gedanke eines kostenfreien Zahlungsmittels ganz gut ankommt, weil's bisher einfach keine Alternative gibt.

Anonym sind die ganzen Cryptocoins hingegen nicht wirklich: Sämtliche Transaktionen sind öffentlich, sodass sich jederzeit nachvollziehen lässt, wie viel von welcher Adresse zu welcher fließt.

Meine Erfahrungen mit Cryptocoins beziehen sich auf ein paar Testläufe Anfang letzten Jahres: Habe da für ein paar Monate einen Litecoin-Miner auf einem idlenden Homeserver (muss zwecks Cloud-Backup eh 24/7 laufen) laufen lassen.
Ergebnis nach der Zeit: 9 Litecoins, deren Wert unter $5 lag.

Naja - inzwischen ist das Zeug knapp $200 Wert.
Habe spaßeshalber die Hälfte in allerlei andere Cryptocoins getauscht - deren Wert jeweils regelmäßig um die +/- 50% schwankt.

Inzwischen mine ich wieder mit der Idle-Leistung - in den letzten 24h kamen so immerhin knappe $0.02 zusammen. Und die Chance, dass das Zeug nochmal nach oben schießt, ist immerhin größer als die eines 6er im Lotto - und gratis isses auch noch 😁
Naja - aber Geld in die Hand nehmen, um minen zu können, würde ich definitiv nicht. Die c't hat das IMHO ganz nett damit auf den Punkt gebracht, dass diejenigen, die von einem Goldrausch profitieren, hauptsächlich diejenigen sind, die die ganze Ausrüstung verkaufen - ASIC Miner etc. in diesem Fall.

Bezahlen würde ich mit Cryptocoins jedenfalls in absehbarer Zukunft nicht - zu groß ist der Aufwand (erstmal stundenlang irgendeine Blockchain downloaden, irgendwelchen dubiosen Seiten echtes Geld überweisen und dann erst einige Zeit später Coins rauskriegen) und die besagten Wechselkursschwankungen. Außerdem kann man das Geld dann nur von dem Rechner nutzen, auf dem man das Wallet liegen hat und läuft Gefahr, dass man bestohlen wird.
Ein Online-Wallet wirkt dem dann natürlich etwas entgegen, aber es ist nicht unwahrscheinlich, dass der Anbieter mitsamt dem Kontostand von einem Tag auf den anderen einfach verschwindet.

Naja - da zahle ich gerne die paar Prozent für eine Kreditkarte mit 0€ Haftung und/oder die Paypal-Gebühr.

26.01.2014 - 22:27 Uhr

Wie frage ich jetzt ab das die beiden Tasten gedrückt sind?
Ein UND-Case gibts ja nicht 😉

Nein, aber zwei bzw. vier if-Statements sollten den Job auch tun.

Bitte beachte aber, dass wir gewisse Grundlagen (worin deine Frage definitiv zählt) hier voraussetzen.

25.01.2014 - 13:32 Uhr

Hallo Abt,

ich habe zwar keine aktiven OS-Projekte (private Projekte liegen in GIT auf einem TFS - klappt bisher echt ganz gut), also rein aus Entwicklersicht:

Nichts gegen Codeplex, allerdings habe ich das Gefühl, dass die Plattform leider ein wenig auf dem "Abstellgleis" ist: Es finden sich dort zwar einige qualitativ hochwertige Projekte, aber recht wenige davon werden wirklich noch aktiv gemaintained.
Außerdem ist Codeplex IMHO etwas "isoliert" auf MS - mit GitHub erreicht man meiner Meinung nach eine deutlich größere Community (insbesondere bei nicht-MS Technologien wie Java, JavaScript etc.).

Zudem finde ich die Oberfläche von GitHub deutlich angenehmer als die von Codeplex; ist aber mehr subjektiv. Wichtig für den Erfolg eines OS-Projektes ist IMHO auch eine aktuelle Readme-Datei, die (zumindest ungefähr) beschreibt, wie man das Projekt eingebunden und zum Laufen kriegt. Ohne die ist ein Projekt bei mir meist "unten durch", da ich teilweise die Erfahrung gemacht habe, dass selber machen (bei kleineren Komponenten) in so einem Fall schneller geht.

Da ich inzwischen mehr im Java-Umfeld unterwegs bin (MS ist bei meinem Arbeitgeber nicht allzu gerne gesehen; äußert sich auch in einer fehlenden Office-Lizenz...) nutze ich meist Maven (geht in die Richtung von NuGet, allerdings XML-basiert und deutlich mächtiger).

Dazu muss ich sagen, dass mich das Dependency-Management unter .NET immer ein wenig davon abgehalten hat, "triviale" Komponenten zu verwenden: Wohin damit? Ins Sourcecontrol? Wie sieht das dann mit den Lizenzen aus etc.? (Note: Rein rhetorisch, die Frage 😉 ).
Unter Maven ist das anders: Fünf Zeilen XML hinzufügen und die Dependency wird automatisch geladen und eingebunden und der Build läuft reproduzierbar auch über Plattformgrenzen (OSX / Windows). Kompilate oder Quellcode runterzuladen (und dann Stunden damit zu verbringen, diesen zum Kompilieren zu bringen... - daher ein klares Nein! zum Wunsch, den Fremdcode in den eigenen zu integrieren), fühlt sich damit dann schon richtig altertümlich an.

Ähnlichen Komfort bin ich bisher nicht von NuGet gewohnt, in letzter Zeit hat sich die Situation aber IMHO deutlich verbessert - allerdings sind bisher nur recht wenige Projekte auch tatsächlich dort verfügbar.

22.01.2014 - 12:03 Uhr

die Geradengleichungsformen (bzw. Steigungsform, 2 Punkteform) nicht verwendet werden sollen?

Alternative wären dann ja noch die Beschreibung der Gerade mittels Vektoren (x = a + b*y, wobei x, a und b jeweils Vektoren sind). Dann kann man - soweit ich mich erinnern kann - recht elegant den Schnittpunkt berechnen (und hat auch keine Probleme mit der Steigung im Falle der vertikalen Linie).
Ist aber doch schon wieder eine Weile her, das ganze - aber evtl. findest du damit ja noch was Eleganteres 😉

21.01.2014 - 16:27 Uhr

Ja - geht ganz einfach mit dem Google-Maps-SDK:
Einfach Link zusammenbasteln und du hast eine Karte, z.B.:
https://maps.googleapis.com/maps/api/staticmap?center=Germany&zoom=5&size=450x300&maptype=terrain&markers=color:red%7Clabel:%20%7Cberlin&sensor=false
wird zu:

09.01.2014 - 13:55 Uhr

Wenn sich das bewährt kann man immer noch an eine größer bzw. spezifischere Lösung denken.

Damit würde ich ehrlich gesagt gar nicht groß anfangen.
Ein NAS eignet sich IMHO nicht wirklich als Webserver.

Nehmt lieber einen "echten" Server, der auch ein paar Dateifreigaben hat; da habt ihr dann vermutlich mehr davon.

06.01.2014 - 21:32 Uhr

Hast du viellecht überlesen nicht schlimm.

Genau, schlimmer ist nämlich, dass du den verlinkten Beitrag offensichtlich auch nicht genau genug gelesen hast:

Wie man eine Exception fangen kann, wenn man nicht weiß, wo sie geworfen wird

Eine Exception wird in der umgekehrten Reihenfolge, in der die Methoden einander aufgerufen haben, nach oben geworfen und zwar bis zum ersten try/catch auf das sie trifft oder - wenn es ein solches nicht gibt - bis ganz oben (unhandled exception). Wenn die Exception nicht durch ein bestehendes try/catch "weggefangen" wird, kann man die Exception also ganz oben abfangen. Ganz oben ist im Main-Thread die Main-Methode und für andere Threads deren ThreadStart-Methode bzw. deren Entsprechung, z.B. bei BackgroundWorker der DoWork-EventHandler.

Statt die Exception mit try/catch abzufangen, kann man sie auch unbehandelt lassen und die entsprechenden Events abonnieren, um ihrer habhaft zu werden, als da wären AppDomain.UnhandledException (für alle Anwendungsarten), Application.ThreadException (für Windows-Forms-Anwendungen) und Application.DispatcherUnhandledException (für WPF-Anwendungen).

Man muss jedoch nicht unbedingt den Code ändern, um an die Exception zu kommen. In Visual Studio kann im Menü "Debug"/"Exceptions" eingestellt werden, dass der Debugger bei einer Exception automatisch hält. Dazu ist in "Common Language Runtime Exceptions" bei "Thrown" der Haken zu setzen. Diese Einstellung gilt für die aktuelle Solution.

Tritt nun eine Exception auf, so hält der Debugger an der betreffender Stelle und über die DataTips (mit der Maus über eine Variable fahren) können die Werte der Variablen geprüft werden.

Außerdem sagt doch die Messagebox, wie du an die Exception kommst (via Event).

06.01.2014 - 13:11 Uhr

Hallo SlyFox,

insbesondere solltest du beachten, dass du in der **Release **Konfiguration **ohne **angehängten Debugger misst. Sonst verzerrt das ganz schnell das Ergebnis...

Noch ein paar andere Punkte, auf die du beim (manuellen) Messen achten solltest (IMHO ist ein Profiler sehr gut, um einen Überblick über die Gesamtperformance zu erhalten; Optimieren kann man dann am besten mittels direktem Vergleich von Codeschnippseln):*Mehrfach messen - ruhig ein paar tausend mal und dann die beste Zeit und den Durchschnitt betrachten *Vor jedem Test GC.Collect() aufrufen (damit keine GC dazwischenkommt) *Vor jedem Test Thread.Sleep(0) aufrufen (damit der Test möglichst in einer Zeitscheibe durchrennt) *Priorität des Prozesses auf "High" setzen (damit du möglichst lange Rechenzeit zugeteilt bekommst) *Keine andere Software nebenher laufen lassen (ok , sollte eigentlich selbstverständlich sein) *Vor der eigentlichen Messung "aufwärmen", d.h. erstmal allen Code einmal aufrufen, sodass der JIT-Compiler seine Aufgaben erledigen kann *Berechnungen der Zeiten erst nach dem Stoppen der Stopwatch durchführen *Affinität des Threads auf einen Core setzen (den im Idealfall keine anderen Prozesse / Threads) zugeordnet sind.

06.01.2014 - 10:48 Uhr

Hallo UNeverNo,

evtl. würde es helfen, weiter einzugrenzen, in welche Richtung du gehen möchtest - Softwarearchitektur ist jetzt ja auch kein so kleines Feld. Oder geht es mehr "ums Große Ganze"? Best Practices? Entwurfsmuster? Architekturen verteilter Anwendungen? ...?

Sich erst einmal im Klaren zu sein, über was genau man sich eigentlich weiterbilden möchte und ein paar Anforderungen zusammenszustellen, ist IMHO der erste Schritt. Insbesondere, wenn man weiß, wo man in nächster Zeit seine Schwerpunkte setzen möchte, sodass man auch eine Fortbildung wählt, die dazu passt.

Was hast du denn bisher so im Blickfeld? Vielleicht hat da jemand dann ganz konkrete Erfahrungen dazu.

22.12.2013 - 21:23 Uhr

Bezogen auf die Eingangsfrage:
Rein von der Syntax geht das mithilfe eines kleines Tricks:


class Foo<T>
{
    Foo(string name)
        : this(name, ref new Helper<T>().obj)
    { }

    Foo(string name, ref T obj) { }
}

class Helper<T>
{
    public T obj;
}

16.12.2013 - 22:20 Uhr

Hast du mal in die Doku geschaut?
Der Parameter muss in INavigationAware.OnNavigated abgefragt werden, statt im Konstruktor.

15.12.2013 - 13:56 Uhr

Aha - also DevExpress.
Siehe z.B. INavigationService.Navigate(String,Object,Object) Method (der 2. Parameter ist ein frei wählbares Objekt) oder How to: Pass data between loosely coupled View Models

13.12.2013 - 21:45 Uhr

Hallo Steffen555,

herzlich willkommen hier auf myCSharp.de!

Wo genau kommt denn der INavigationService her? 3rd-Party? Eigenentwicklung?
Davon hängt recht stark ab, wie du weiter vorgehen kannst.

Du hast recht: Das ViewModel aus dem MainWindow zu holen ist alles andere als elegant.

Schaue dich einmal um, ob du eventuell das DetailViewModel zunächst erzeugen und erst in einem zweiten Schritt zu ihm hinnavigieren kannst. Dann hättest du direkten Zugriff darauf ohne irgendwelche Umwege.

09.12.2013 - 16:20 Uhr

Kann ich dann theoretisch auch alle Instanzen einer Klasse, die in dem aktuellen Prozess erstellt wurden und noch nicht zum löschen frei gegeben wurden, abfragen?

Aus Performance-Gründen: Verwende einen (fertigen) MemoryProfiler, z.B. den von Jetbrains.

Zu Logging / Debug-Zwecken:
Füge im Konstruktor der Objekte eine WeakReferenz auf this in eine statische Liste ein (wie herbivore meinte); muss eigentlich kein Dictionary sein.

02.12.2013 - 13:56 Uhr

Kann das jmd. Bestätigen?

Obligatorischer Hinweis: Bitte beachte, dass wir hier im Forum keine Rechtsberatung geben können oder dürfen. Für eine abschließende Antwort bleibt dir also nur eine Anfrage beim MS-Support oder der Gang zu einem Rechtsanwalt.

30.11.2013 - 19:21 Uhr

Einzige Möglichkeit: einen eigenen Container und das dazugehörige Programm entwickeln (zB wie TrueCrypt).

Wenn du den Ordner nicht im Explorer sehen können musst (und es dir lediglich darum geht, die Dateien entsprechend abzulegen), kannst du auch auf "fertige" Container zurückgreifen, z.B. Codeplex: NFileStorage. Das lässt sich bestimmt so konfigurieren bzw. erweitern, dass der Container verschlüsselt wird.

Wenn du das ganze wirklich im Explorer haben willst, wird es etwas trickreicher: Dann ist ein virtuelles Dateisystem, was du suchst, z.B. Dokan, Callback File System oder eine WebDAV / SMB Implementierung. Aber das klingt alles andere als trivial.

29.11.2013 - 08:09 Uhr

Ja, ich weiß das will es deshalb ja nich verwenden.

Evtl. wäre es eine Überlegung wert, dein viewModel so umzustellen, dass es zwar ungültige Werte in seinen eignen Properties zulässt, aber nur gültige Werte weitergibt.
Dann kannst du wunderbar Validierungsfehler mittels IdataErrorInfo anzeigen und bist deine Probleme los.

Alternativ kannst du auch mittels Exception Validierungsfehler auslösen (Binding.ValidatesOnException) oder so. Davon würde ich aber eher abraten und diese Vorgehensweise nur für die Schicht unter den ViewModels anwenden.

28.11.2013 - 20:10 Uhr

Ich würde das in der Abwendung prüfen

...wobei das IMHO der Usability schadet, wenn beim ersten Start der Anwendung dann nochmal etwas installiert werden muss (u.U. muss dann nochmal ein Admin das Kennwort eingeben usw.).
Ein derartiger Check macht also nur zusätzlich Sinn.

Die gängige Variante ist in solchen Fällen glaube ich, das Update einfach generell mit auszuliefern und zu installieren (Silent).

Ansonsten: Siehe Registry, wie in Update for the .NET Framework 4 beschrieben.

28.11.2013 - 13:32 Uhr

Hallo Robin0,

verwende besser IDataErrorInfo zur Validierung; dann stellt sich das Problem erst gar nicht.

27.11.2013 - 23:38 Uhr

Habe ich das richtig verstanden, meine Tabellen sowie derren Spaltennamen, erstelle ich in Klassen? Ist das auch empfehlenswert wenn ich SQLite verwenden möchte?
Was ich noch nicht verstehe, ich hatte Stored Procedures, kann ich die hier vergessen?
Wie schaut es aus wenn ich abfragen wie Inner Join habe?

Grundsätlich funktioniert NHibernate mit so ziemlich allen DB-Systemen, mit recht großer Sicherheit auch mit SQLite. Du kannst das DBMS dann auch später recht einfach austauschen.

Im Prinzip trifft es dann schon: Je Tabelle eine Klasse, je Spalte ein Feld. Gibt aber auch komplexere Mappings für Vererbung etc. Wenn du eine genauere Frage hadt, am besten in Datentechnologien stellen.
Für den Anfang bietet sich evtl. ein kleines Testprojekt an, in dem du etwas den Umgang mit Nhibernate übst.

Stored Procedures kannst du zwar einbinden, ich würde aber im Normalfall nicht dazu raten, diese allzu exzessiv einzusetzen. Führt meist zu versteuter Anwendungslogik, schlecht gemanagetem SQL-Code (Versionsverwaktung usw. wird da gerne mal eingespart) und anderen Problemen.

Ich habe mir das jetzt anfangs so vorgestellt:

Was sollen wir groß sagen?
Klar - ist eine Möglichkeit. Wie gesagt: Die "richtige" Lösung gibt es nie.
Die Namensgebung des Repository Projektes ist aber IMHO etwas verwirrend, da ein Repository im Normalfall eine Klasse für den DB-Zugriff darstellt.

27.11.2013 - 20:00 Uhr

Wo würden dann die Interfaces reinkommen?

Kommt darauf an, welche 😉
Generell ist die Aufteilung auf mehrere Projekte vor allem sinnvoll, wenn sich nicht alle gegenseitig referenzieren. Folglich sollten die Interfaces in das Projekt, wo sie Sinn machen - eine Auslagerung in ein separates Projekt würde ich erst durchführen, wenn das tatsächlich benötigt wird (z.B. wenn das DB-System ohne Rekompilierung ausgetauscht werden soll).

Bisher habe ich eine Datenbank Klasse die, die Verbindung zu DB herstellt sowie z.B. DataTable's zurückgibt oder Befehle ausführt, so habe ich es bisher gemacht.

Davon würde ich mich eher verabschieden: DataSets sind zwar in manchen Situationen ganz nett, taugen aber IMHO nicht als Ersatz für Businessobjekte (eingeschränkte Validierungsmöglichkeiten, kein Einbau von Funktionalität möglich, ...).

Mit NHibernate und LinqToEntities habe ich noch nie gearbeitet, kannst du mir gute Tutorials auf deutsch empfehlen

Auf deutsch ist immer so eine Sache... Weitaus mehr findet man auf Englisch.
Spontan bin ich z.B. auf: Zweiter Start mit NHibernate gestoßen - allerdings ist das doch recht oberflächlich.

27.11.2013 - 19:22 Uhr

Hallo ilcsh,

ohne deine Frage im Detail zu beantworten, ein paar Anmerkungen meinerseits:

Beide der Links sind von 2008. Das heißt jetzt prinzipiell erst einmal nichts, aber wenn du ein neues Projekt beginnst, solltest du dir bewusst sein, dass die Links aller Voraussicht nach nicht den aktuellen Stand der Technik widerspiegeln könnten.

3-Schichten Modelle sind grundsätzlich sinnvoll, allerdings würde ich bei einem neuen Projekt zu einem sogenannten ORM (Object-Relational-Mapper) raten. Hier sind vor allem NHibernate und LinqToEntities (Entity Framework, EF) verbreitet.
Beide bieten auch Support für LINQ-Expressions, sodass du zum DB-Zugriff z.B. Code schreiben kannst wie:


Customer customer = context.Customers.Where(c => c.LastName == "Müller").FirstOrDefault();

IMHO erleichtert das die Arbeit mit einer DB erheblich, indem es die Menge an (Infrastruktur-)Code deutlich reduziert.

Zum anderen solltest du unbedingt auch ein Design-Pattern für dein UI verwenden: Unter WPF wäre das meiner Meinung nach am besten MVVM und unter WinForms MVP (in der Ausprägung Passive View - wobei es hier verschiedene Standpunkte gibt).

Die Entscheidung für einen DI-Container ist sehr löblich, evtl. kannst du auch mal einen Blick auf andere Container werfen. Ist nur eine persönliche Ansicht, aber IMHO ist Unity nicht der beste, den es gibt.

Bzgl. Projektstruktur würde ich mir zu Beginn noch keine allzu großen Sorgen machen - das ist etwas, was man später auch noch leicht ändern kann.
Beginnen kannst du z.B. mit vier Projekten:

  • Views (enthält alle Controls + Codebehinds)
  • Presenters (alle Presenter aus MVP)
  • Models (alle Businessobjekte + Klassen für NHibernate)
  • App (verbindet alles)
26.11.2013 - 23:19 Uhr

ich dachte nur, da man die Express Versionen umsonst runterladen und benutzen kann, darf ich diese nur für Testzwecke einsetzen.

Unter Umständen bekommst du bzw. deine Frau sogar weit mehr als nur die EE, siehe Microsoft BizSpark.

26.11.2013 - 23:13 Uhr

Hallo lassner,

herzlich willkommen hier auf myCsgarp.de!

Wenn du wirklich Plaintext benötigst (z.B. für den Versand), kannst du einen Blick auf Base64 werfen (siehe Convert.ToBase64String).

26.11.2013 - 23:11 Uhr

Hallo Steffen2012,

Kleine ergänzung: um den Style wirklich global verfügbar zu machen, kannst du ihn entweder in die Resourcen der App.xaml legen oder ein Theme verwenden, wie in http://www.microsoft.com/germany/msdn/solve/knowhow/howto/cliententwicklung/WieThemeIchEineWPFAnwendung.aspx gezeigt.

26.11.2013 - 13:07 Uhr

Hallo Hunv,

ich würde erst einmal damit anfangen, ObservableCollection statt List zu verwenden, und deinen Getter nicht jedes Mal eine neue Liste zurückgeben zu lassen.

Außerdem ist mir noch nicht so ganz klar, was dein Control genau macht bzw. wozu du die DependencyProperty brauchst.
Reicht nicht auch ein "normales" ViewModel als DataContext?

26.11.2013 - 13:02 Uhr

Der einizige, halbwegs passable Workaround den ich kenn wäre ein zusätzliches Property im ViewModel anzulegen, welches direkt auf die Visibility gebunden wird. Mir erscheint das aber etwas umständlich und auch unsauber.

So ähnlich würde ich das aber auch lösen: Packe eine zusätzliche Property ins VM (vom Typ bool, z.B. CanDoFoo) und binde den Trigger gegen diese.
Je nach verwendeter Library kannst du dir dann unter Umständen sogar den Style sparen, wenn du (z.B. via attached property) festlegst, dass inaktive Buttons automatisch ausgeblendet werden.

Codetechnisch könnte ich mir z.B. folgendes vorstellen:


<Button Commands.Visible="CanDoFoo" />

20.11.2012 - 14:18 Uhr

Hallo scrabbl,

im einfachsten Fall kannst du einfach den Konsolenoutput des Java-Programmes parsen und entsprechende Eingaben machen (Stichwort: RedirectStandardOutput).

Generell kannst du natürlich auch Server-Technologien (SOAP, usw.) zur Kommunikation verwenden; aber der Aufwand wird vermutlich höher sein als die Komponente nach C# zu übersetzen.

Ansonsten finden sich noch ein paar Ansätze in Reference Java DLL in C# Assembly? - unter anderem das Hosting des Java-Bytecodes in der CLR.

20.11.2012 - 12:42 Uhr

Hallo curry11,

herzlich willkommen hier auf myCSharp.de!

Blöde Frage: Ist die entsprechende Komponente auf dem Server korrekt registriert (in der gleichen Version wie auf dem Testrechner)?
Hat die Komponente selbst vielleicht noch irgendwelche Abhängigkeiten?

Zum Testen kannst du ja mal schauen, ob die Komponente in einer Konsolenanwendung auf dem Server verwendet werden kann; da kannst du ja auch evtl. mal den Remotedebugger anhängen.

20.11.2012 - 12:38 Uhr

Und wenn man das tut, wenn man also schon bei den Unittests (und erst recht bei TTD) die Robustheit einkalkuliert, dann wird auch der Programmcode die gewünschten QA-Anforderungen erfüllen

Die Frage ist aber doch gerade, ob das überhaupt möglich ist: Als Entwickler bringt man da durchaus eine gewisse "Betriebsblindheit" mit oder wie Sebastian.Lange es IMHO ganz gut auf dem Punkt bringt "Niemand kann sich selbst überprüfen".

IMHO sollte es auch gar nicht Aufgabe der Unittests sein, auf Robustheit zu testen: Was bringt es mir, wenn ich weiß, dass eine Komponente (die in einem Unittest ja komplett isoliert getestet wird) zwar "robust" ist?
Ich darf nicht einfach folgern, dass wenn in einem System nur "robuste" Komponenten arbeiten, dass System auch robust ist.

Andererseits brauche ich, um ein robustes System zu realisieren, nicht nur lauter robuste Komponenten: Wenn Komponente A crasht, wenn irgendwo ein null Wert steht (und somit nicht robust ist), aber nur von Komponente B aufgerufen wird, die aber genau sicherstellt, dass dieser Fall nie eintritt, würde ich im gesamten trotzdem von einem robusten System sprechen.

Insofern unterstützte ich den verlinken Artikel durchaus in seiner Aussage, dass UnitTests keine Bugs "finden" (da sie schon während der Entwicklungszeit ausgeführt werden, ist ein fehlschlagender Unittest IMHO noch kein "Bug" im herkömmlichen Sinne, da er ja sofort gefixt wird, d.h. nie in einer Nicht-Entwicklungsversion auftaucht), sondern hauptsächlich bei der Entwicklung helfen. IMHO ist das aber auch richtig so; genau dafür gibt es ja Integrations- und Systemtests.

Klar - ich stimme dir zu, dass man sich beim Unittest-Schreiben Gedanken über mögliche, exotische Werte machen muss.
Aber m.E. nur innerhalb der definierten Grenzen der Komponente, die man damit testet.

20.11.2012 - 12:23 Uhr

Jetzt wird das Grid ausgeblendet

Wann genau? Bzw. aufgrund von welchem Ereignis?
Evtl. ist der Klick einfach noch nicht abgearbeitet; blende das Grid testweise mal mit einem Dispatcher.BeginInvoke aus, dem du eine sehr niedrige Priorität übergibst (Idle oder so ähnlich).

Ich glaube es hat doch nur etwas mit WinRT und Asynchronität zu tun. Normal dürfte so etwas nicht passieren.

Wie gesagt: Wenn du es mit wenig Code reproduziert kriegst, wäre das ganz hilfreich.

19.11.2012 - 23:34 Uhr

Wenn du auf den Komfort der schnellen Navigation via F1 verzichten kannst, kannst du auch Package This wie in Where can I download MSDN documentation? beschrieben verwenden.

Schnell mal ein LAN-Kabel dranstöpseln wäre aber natürlich einfacher 😉

19.11.2012 - 23:29 Uhr

Ich möchte, dass die Events nicht an das Image unter dem Grid geleitet werden, nachdem es wieder sichtbar ist.

Das hab' ich jetzt nicht genau verstanden: Du hast also ein Grid, dass (wie du es willst), Events eines darunterliegenden Images quasi "abfängt". Dann blendest du es aus, die Events landen (ebenso korrekterweise) beim Image.
Und dann blendest du das Grid wieder ein und die Events landen immer noch beim Image.

Richtig soweit?

Am besten postest du mal ein wenig Code; idealerweise in der Form von [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden

19.11.2012 - 22:17 Uhr

Was willst du jetzt eigentlich genau erreichen?
Dass die Events vom Grid abgefangen werden oder nicht?

19.11.2012 - 22:07 Uhr

dann wird das Click.Event an das Image weiter gereicht, wenn das Grid ausgeblendet wird.
Das ist wirklich seltsam.

Ne - das ist nicht seltsam 😉
Ausgeblendete bzw. unsichtbare Control(-Teile) erhalten nie Mausevents.

Transparente Controls hingegen schon (mache also als Lösung das Grid mur transparent); siehe {x:Null} vs. Transparent

19.11.2012 - 22:04 Uhr

Den Teil "Profile" würde ich nun in ein entsprechendes Klassenkonstrukt übertragen, so dass ich da dran fröhlich rumbasteln kann.

Google mal nach "XSD.exe generate classes" - da gibt's ein Tool, dass anhand einer XSD (lässt sich notfalls auch aus der XML-Datei generieren) die C# Klassen für die Serialisierung generiert.

19.11.2012 - 22:01 Uhr

Hallo da_user,

für's 2012er Studio gibt's die MSDN Library auch als ISO-Download; siehe z.B. Visual Studio 2012 Documentation Download.
Da du eh die EE einsetzt, kannst du ja ohne weiteres umsteigen.

19.11.2012 - 12:32 Uhr

Hallo Rockz95,

herzlich willkommen hier auf myCSharp.de!

Jetzt habe ich das Problem, dass die Collection jede einzelne Zahl in die Liste einfügt und es deswegen ewig lange dauert.

Füge einfach nur die Zahlen in die Collection ein, die du auch tatsächlich darstellen willst.

Wenn du alle Zahlen darstellen willst und nur die Performance das Problem ist, erstelle einfach eine neue Collection, füge die Zahlen ein und weise dann die neue Collection an die gebundene Property zu.

19.11.2012 - 00:28 Uhr

Kann ich mommentan leider nichts mit anfangen.

Übergib der String.Format Methode aus deinem ersten Beitrag einfach noch CultureInfo.InvariantCulture als (zusätzlichen) ersten Parameter, also:

bs_ZF.Filter = string.Format(CultureInfo.InvariantCulture, "[Kunde] LIKE ...");

Dann wird glVar.AnzRest so formatiert, wie es sollte und es steht nicht mehr z.B. "5,00" im Filter, sondern "5.00".

BTW: Warum eigentlich "[Rest] < {6}"?
So viele Parameter hast du doch gar nicht angegeben? Nimm da mal eine 4.

DIESE ZEILE FUNKTIONIERT NICHT

BTW²: Darum poste bitte in Zukunft auch (wie du das in deinem letzten Posting gemacht hast, die vollständige Fehlermeldung - wenn auch bitte in Zukunft als Text in einem ERROR-Tag (Mittels STRG+C aus der Messagebox kopieren).
Dann ist diese Raterei meinerseits in der jetzigen Form nicht nötig.

18.11.2012 - 18:31 Uhr

Hallo StephanUser,

herzlich willkommen in der Welt der Foren und speziell natürlich herzlich willkommen hier auf myCSharp.de! 🙂
BTW: Es ist eher nicht üblich, den Beitrag explizit in Arial zu posten; die Standardschrift ist schon in Ordnung; ich habe das mal geändert.

Filter erwartet Werteangaben in der Invarianten Kultur:

Zitat von: BindingSource.Filter Property
If the underlying data source is a DataSet, DataTable, or DataView, you can specify Boolean expressions using the syntax documented for the DataColumn.Expression property.

Zitat von: DataColumn.Expression Property
All literal expressions must be expressed in the invariant culture locale.When DataSet parses and converts literal expressions, it always uses the invariant culture, not the current culture.

Insofern musst du "3.0" statt "3,0" verwenden.

Am besten geht das mit der Überladung von double.ToString(IFormatProvider), der du CultureInfo.InvariantCulture übergibst bzw. verwende lieber gleich String.Format(IFormatProvider, String, Object[]); dann werden alle Parameter entsprechend der Vorgaben des DGVs formatiert.

18.11.2012 - 18:23 Uhr

Hallo eXestend,

letztlich wird jQuery von dem Chat vermutlich hauptsächlich dazu benutzt, WebRequests an den Server abzusenden.

Das kannst du auch in C# mit der WebClient Klasse und (je nach Format) JSON.NET bzw. Linq2XML.

17.11.2012 - 22:16 Uhr

Siehe [FAQ] Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik)
==> Geschlossen

Verwende aber besser gleich das entsprechende CellFormatting Event und DateTime.ToString.

17.11.2012 - 22:16 Uhr

Hallo crank,

herzlich willkommen hier auf myCSharp.de!

Dazu kannst du ein ContentControl bzw. ein ContentPresenter verwenden.
Binde dessen Content Eigenschaft an eine Property eines ViewModels und ändere den Wert der Property entsprechend ab, sodass verschiedene Objekttypen zugewiesen werden.

Dann kannst du in den Resourcen für jeden Typ ein anderes Template hinterlegen.

Grob also:


<!-- In den Resourcen: -->
<DataTemplate DataType="{x:Type app:FooViewModel}">
   <!-- ... -->
</DataTemplate>
<DataTemplate DataType="{x:Type app:BarViewModel}">
   <!-- ... -->
</DataTemplate>

<!-- ... -->

<ContentPresenter Content="{Binding Path=Details}" />


//Im Konstruktor des Windows bzw. Haupt-UserControls
this.DataContext = new MainViewModel();

//...

public class MainViewModel : //...
{
   //...

   public DetailsViewModel Details
   {
       //getter + setter mit INotifyPropertyChanged Implementierung
   }

   //...
   {
      this.Details = new FooViewModel(/*...*/);
   }
}

//Gemeinsamer Code für die Ansichten
public abstract class DetailsViewModel
{
   //...
}

//ViewModel Klassen für die verschiedenen Ansichten
public sealed class FooViewModel : DetailsViewModel 
{
   //...
}
public sealed class BarViewModel : DetailsViewModel 
{
   //...
}

15.11.2012 - 22:21 Uhr

Hallo Norman9494,

siehe [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke) - du kannst nicht einfach aus dem BGW auf Controls zugreifen; das führt zu allerlei unangenehmen Nebeneffekten.
Die Aktualisierung des DGVs muss wieder im UI-Thread erfolgen (am besten durch Data-Binding).

Woran erkennst du denn, dass der BGW noch "busy" ist?