Laden...

Forenbeiträge von winSharp93 Ingesamt 5.742 Beiträge

09.02.2012 - 15:03 Uhr

Hallo chriscolm,

macht evtl. die TranslationExtension noch irgendwas mit dem Label bzw. dem Text darin?

09.02.2012 - 15:00 Uhr

Übrigens, die Klasse in meinem Bild sollte nicht nur den Zustand (launched/ready/...) angeben sondern auch bei die ganze Webcam repräsentieren.

Dann hast du die Klasse mit "webcamLaunched" aber etwas unglücklich benannt 😉

Wenn ein Frame von der Cam fertig ist, wird quasi ein Event fertig gemacht und das Hauptprogramm informiert, dass gibt die Daten dann via Methode weiter.

Nein - der Umweg über die Hauptform ist sinnlos.
Das Event FrameReady (oder wie du es auch nennen willst), wird direkt von der Kameraform abonniert. Dann stellt sich auch die Frage der Zuordnung nicht: Jede Kameraform enthält ihre Instanz der Webcam im Konstruktor und kommuniziert dann direkt mit dieser.

09.02.2012 - 12:39 Uhr

Hallo,

probiere mal Assembly.LoadFile statt Assembly.LoadFrom.

BTW: Du kannst auch via typeof(IInterface).IsAssignableFrom(type) prüfen, ob ein Typ ein Interface implementiert.
Dann sollte auch definitiv keine Exception beim Cast auftreten.

09.02.2012 - 12:34 Uhr

Hallo Levion,

kannst du evtl. den Support von denen mal anschreiben und nachfragen, ob sie es auch ohne Farbverfälschungen drucken können?
Im Zusammenhang mit PDFs hatte ich schon ein paar Probleme mit diversen Farbprofilen; evtl. kommt ja nur deren Voransicht nicht damit klar.

09.02.2012 - 11:18 Uhr

Hallo Console32,

warum das (indexbasierte 😜 ) Rumhantieren direkt an dem XML-Dokument?
Verwende besser XML-Serialisierung.

Dispost du an irgendeiner Stelle Controls?

09.02.2012 - 11:14 Uhr

IMHO braucht die Welt zur Zeit nicht ständig neue (vollständige, DSLs ausgenommen) Programmiersprachen; es gibt m.E. bereits mehr als genug...

Die von Mozilla sollen sich lieber mal auf ihren Browser konzentrieren 😁

09.02.2012 - 10:11 Uhr

Hallo zusammen,

ein sehr interessantes Projekt in diesem Zusammenhang sind IMHO auch Knockout JS, das dynamische Templates (inkl. Databinding) an Javascriptobjekte bietet.
Damit klässt sich zumindest eine teilweise Trennung von HTML und JS erreichen.

09.02.2012 - 10:07 Uhr

Hallo klaus_klausen,

herzlich willkommen hier auf myCSharp.de!

Dein jetziges Design ist - so wie ich es verstanden habe - eher suboptimal.

Das beginnt schon mit der Klasse webcamLaunched (abgesehen davon, dass man Klassen im Normalfall groß schreibt).
Eine Klasse repräsentiert im Normalfall ein Objekt aus der realen Welt (z.B. Webcam, Bild, Video, etc.) oder ein Actor (WebcamDiscoverer, etc.).

Deine Klasse repäsentiert jedoch vielmehr den Zustand eines Objektes.

Als zweiten Kritikpunkt ist deine Kommunikation zwischen Klassen und Forms genannt: Wie in [FAQ] Kommunikation von 2 Forms beschrieben, sollte eine Modelklasse niemals die zugehörige Form kennen.
So etwas scheinst du jedoch durch die "mittige" Anordnung der Modelklasse zu planen.

Als groben Anhaltspunkt würde ich dir folgende Struktur vorschlagen:
Die Hauptform nutzt eine Klasse wie WebcamDiscoverer, um eine Liste der verfügbaren Webcams anzuzeigen.
Will der User einen Livestream einer Webcam anzeigen, wird von der Hauptform eine neue DisplayForm angelegt und die (vom WebcamDiscoverer gelieferte) Webcam (auch eine Klasse) dieser Übergeben.
Da die Displayform dann eine Referenz auf die Webcam hat, kann sie auch Einstellungen etc. ändern.

08.02.2012 - 21:35 Uhr

Das heißt jedesmal wenn der Anwender ein Element aus der ListBox1 auswählt, müßte ich die Archiv-Datei erneut öffnen.

Ja - so würde ich das machen.
Das Windows-eigene Diskcaching sollte das schonmal um einiges beschleunigen.

Wenn es immer noch nicht flott genug ist, kannst du ja immer die Dateinamen der nächsten Ebene (also sprich die Namen; nicht die Inhalte! aus Listbox 2) im Hintergrund cachen.
Dann müsstest du nur noch beim Entpacken auf die Festplatte zugreifen.

Zur Not kannst du auch noch zusätzliche Indexdateien einführen, in denen du sämtliche Dateinamen persistent cachst - als XML o.ä. (bzw. ein verstecktes Archiv in deine Containerdatei mit eben diesen Informationen packen).

Die gesamten Archive im Speicher zu halten, halte ich hingegen für überhaupt nicht sinnvoll.

08.02.2012 - 20:44 Uhr

Das heißt, ich sollte die im Archiv befindlichen Dateien (Name + Offset + Length) auslesen und diese in der Listbox anzeigen. Erst wenn der Nutzer einen Eintrag aus der ListBox ausgewählt, öffne ich das Archiv erneut und entpacke die Daten?

Um was für ein Archivierungssystem handelt es sich?
Etwas Selbstgeschriebenes?
Oder etwas wie NFileStorage? Oder schlichtweg Zip?

08.02.2012 - 11:54 Uhr

Als kleinen Verbesserungsvorschlag solltest du noch die Rückgabewerten der API-Funktionen auswerten und entsprechend Exceptions werfen.

Zudem solltest es auch möglich sein, das Marshalling der Strings mit Attributen zu lösen, statt manuell Nullbytes anzuhängen.

08.02.2012 - 09:15 Uhr

Dann versuche mal, direkt in die Anwendung hereinzusteppen und somit der Exception zuvorzukommen (evtl. vorher Symboldateien + Code für das Framework ziehen).

08.02.2012 - 09:13 Uhr

Hallo Console32,

Meine Frage war eher ob es andere Möglichkeiten gibt die Positionen aller Controls zu speichern (idealerweiße im Designer), oder möglicherweiße eine Fertiges Modul für die Laufzeit welches ich implementiere damit ich meine Positionsdaten nicht "zu Fuß" schreiben muss.

Spontan würde ich alle Controls mit dem Designer so anordnen, wie ich sie haben möchte, dann die Anwendung starten und dann zur Laufzeit die XML-Datei programmatisch erzeugen (dazu alle Controls rekursiv durchgehen).

Ansonsten kannst du evtl. auch was mit Databinding an Resourcendateien hinbekommen.

07.02.2012 - 21:14 Uhr

Hallo schnubber,

herzlich willkommen hier auf myCSharp.de!

Am einfachsten geht es über ein Array:


int zahlen = new [] { z1, z2, z3 };
Array.Sort(zahlen);
//zahlen ist aufsteigend sortiert

Ansonsten kannst du im Prinzip einen beliebigen Sortieralgorithmus verwenden, z.B. Bubblesort.

Deshalb habe ich versucht mit switch () case{}

Switch-Case funktioniert nur mit Konstanten; du kannst also nicht wie in if-Abfragen Bedingungen hinter die case-Labels schreiben.
Das kannst du aber ausgehend von [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen) recht einfach der :rtfm: Doku entnehmen.

07.02.2012 - 16:54 Uhr

Mit dem Drag&Drop brauchst du dann den entsprechenden Border eigentlich nur mehr aus einem Stackpanel in ein anderes verschieben.

Bzw. sogar komfortabler:
Ein ItemsControl verwenden (bzw. eine Listbox mit entsprechendem Template in SL) und dann das Diagramm anhand von Objekten automatisch generieren lassen.
Dann kannst du das "verschieben" durch das Hinzufügen bzw. Entfernen eines Objektes aus einer Liste lösen.

07.02.2012 - 16:52 Uhr

Mein Binding sollte eigentlich funktionieren da bei der Initialiserung der Klasse Message die Eigenschaft von "Nachricht" angezeigt wird.

Der Schein trügt: Du erstellst zwei _Message_s - einmal in XAML und einmal im Code.

Schreibe besser in den Konstruktor des Fensters


this.DataContext = m;

Und lasse bei den Bindings alles außer Path weg.

Dann sollte es klappen.

07.02.2012 - 14:44 Uhr

wie schreibe ich jetzt einen wrapper für die klassen datset und datavalue ? oder wie mache ich diese klasse in C bekannt

Gar nicht - in C gibt es keine Klassen 🤔

Generell würde ich dir aber Managed C++ wärmstens für das Wrapperprojekt empfehlen - da kannst du dann ohne Verrenkungen eine ordentliche API für dein C Projekt bereitstellen.

07.02.2012 - 14:39 Uhr

Sollte man nun für das gesamte Modul ein ViewModel verwenden oder das auf mehrere ViewModels aufteilen (z.b. ViewModel für Grid, ViewModel für Detail, ViewModel für Edit).

Ich würde die aufteilen (zumindest, wenn sie nicht exakt gleich sind) und dann Vererbung nutzen, um die Gemeinsamkeiten nur einmal formulieren zu müssen.

WinSharp93 du schreibst, ViewModel(s) im Codebehind erzeugen..."eigentlich nur eins".

Um das ein wenig zu präzisieren:
Ich würde nur das MainViewModel im Codebehind (der App.xaml.cs) erzeugen und die anderen ViewModels dann innerhalb dieses MainViewModels (bzw. per DI injizieren lassen).

Ich persönlich halte es meist sinnvoller, Controls anhand von ViewModels (per DataTemplate selbverständlich!) zu erzeugen und nicht jedes Control in XAML seinen DataContext spezifizieren zu lassen.

Letztere Vorgehensweise kann jedoch für sehr Webähnliche Anwendungen (also viel Navigation etc.) sinnvoll sein.
In diesem Fall würde ich dann aber auch gleich Magellan einsetzen.

06.02.2012 - 21:55 Uhr

In XAML kann ich bei der Instanzierung eines DataContext-Objekts keine Parameter (in dem Fall die KundenID) übergeben

Da liegt auch das Problem: Am besten erzeugst du deine ViewModels im Codebehind (bzw. eigentlich nur eins; das kannst du dann MainViewModel oder wie auch immer nennen).
Dann kannst du alle Controls via ContentPresenter und DataTemplates erzeugen und gut ist 😉

06.02.2012 - 19:14 Uhr

Das Graphics-Objekt auf das Handle des Powerpoint-Fensters legen führt nicht zum Erfolg, da die Grafik quasi nur "oberflächlich" dargestellt wird und bei einem Windows-Refresh natürlich wieder weg ist.

Du könntest versuchen, in einem Hook auf WM_PAINT zu reagieren und dort jeweils zu zeichnen.

06.02.2012 - 19:10 Uhr

Reicht da ein normaler Anwalt?

Einen für Scheidungsrecht solltest du wohl eher nicht nehmen 😉

06.02.2012 - 19:04 Uhr

Siege generell auch Simple silverlight open-file-dialog errors; du kannst nur einen Dialog pro "User-Interaktion" öffnen.

06.02.2012 - 19:00 Uhr

Hallo Net_Hans,

dein Beispiel ist so simpel, dass die Aufteilung in Model / ViewModel schlichtweg nicht sinnvoll ist.
Was bei dir "Model" ist, kannst du quasi zum ViewModel machen und hast dadurch schon einmal ein einfaches MVVM-Beispiel 😉

Das ViewModel (und evtl. das ModelViewModel) kommen erst bei komplexeren Anwendungen richtig zum Tragen.
In Kürze: Das ViewModel übernimmt sämtliche Transformationen, Aggregationen und Formatierungen der Model-Daten. Somit könnte es z.B. Model-Daten hierarchisch gliedern, Hierarchien auflösen, neu gruppieren etc.

BTW: Deine INotifyPropertyChanged Implementierung ist suboptimal; siehe [Artikel] INotifyPropertyChanged implementieren (zumindest die Prüfung, ob sich der Wert wirklich geändert hat, solltest du einbauen).

BTW2: Verwende besser gleich einen DispatcherTimer - System.Timers.Timer ist für UI Geschichten eher ungeeignet.

04.02.2012 - 16:08 Uhr

Du kannst das zum Beispiel so machen

Dann doch lieber mit INotifyPropertyChanged, was auch kompatibel mit allerlei Framework-Code ist (z.B. DataBinding, etc.).

04.02.2012 - 15:59 Uhr

Hallo Bunnychecker,

irgendwie klingt deine Beschreibung (und vor allem dein Lösungsansatz) sehr eigenwillig.

Vom eigentlichen Problem her gesehen (INotifyPropertyChanged implementieren, ohne die eigentliche Klasse zu ändern), bietet sich IMHO hier eher das Proxy Entwurfsmuster an.

Dieser kann sogar zur Laufzeit automatisch generiert werden; siehe z.B.:
Easy INotifyPropertyChanged Via DynamicObject Proxy
NHibernate & INotifyPropertyChanged

04.02.2012 - 15:50 Uhr

C++ ist denke ich ja schneller als C# da unmanaged und so..

Das hängt ausschließlich vom Können des Programmierers ab; theoretisch lässt sich C++ Code jedoch weitaus tiefergehend optimieren.

Aber ich frage mich, wäre es immernoch schneller einige Sachen in C++ zu machen und dies per C# aufzurufen?

Wenn man es richtig macht: Ja.

Also z.b. SQL Abfragen über C++ Dll auszuführen.

Du hast selber eine SQL-Datenbankengine geschrieben?
Wenn nicht, ist der Datenbankcode sowieso meist in C++ geschrieben und entsprechend optimiert. Wie das SQL zur Datenbank gelangt, ist dann recht unerheblich.

04.02.2012 - 11:52 Uhr

es scheint kein Kundenrechner zu sein, sondern ein andere Rechner im Netzwerk

Kunde ist für mich der, bei dem die Anwendung hinterher läuft bzw. der, der die Anwendung ist Auftrag gegeben hat und sie folglich bezahlt - egal, ob dieser jetzt intern, extern oder sonst was ist 😁

04.02.2012 - 11:34 Uhr

Auf einem einzigen Client habe ich folgenden Fehler:

In einer solchen Situation würde ich dem Kunden eher vorrechnen, dass es billiger ist, den entsprechenden Rechner neu aufzusetzen (bzw. mal gründlich auf Hardwareprobleme zu untersuchen), statt stundenweise Debugging zu investieren...

03.02.2012 - 13:20 Uhr

leider gibt es keine Funktion SetWindowRect (zumindest in der Doku von pinvoke.net). SetWindowPos

03.02.2012 - 13:15 Uhr

Hallo KleinerHacker,

was passiert, wenn du die 3D-Darstellung erst aktivierst, wenn alles geladen ist?

Tritt das Problem nur bei Skyrim auf oder auch in anderen Spielen?

31.01.2012 - 20:58 Uhr

Hat jemand schon mal ein ähnliches Problem

Nicht nur einer... 😉

Win 7 Anzeige 125/150% Label Texte werden abgeschnitten
Form ändert von selbst Größe auf unterschiedlichen Rechnern
Controls (Checkboxen) verschieben sich bei PC's mit anderer Bildschirmauflösung
[erledigt] Bildschirmkoordinaten in Zentimeter umrechnen
Anzeigefehler/Grafikfehler nur auf anderem Rechner, nicht auf dem Entwicklungsrechner
Probleme bei Anzeige von manchen Elementen bei einem Notebook mit WUXGA-Auflösung (1920x1200)
und generell quasi alle Threads aus Forumssuche nach dpi

Ich habe den Thread hier geschlossen; das Thema kommt wirklich sehr häufig.
Wenn die verlinkten Threads dein Problem nicht lösen, schreib einfach kurz das Team an bzw. melde diesen Beitrag und wir machen den Thread wieder auf.

30.01.2012 - 21:09 Uhr

Wo liegt denn das Problem SharpZipLib zu benutzen?

im Not-invented-here-Syndrom

29.01.2012 - 15:43 Uhr

Hallo ErfinderDesRades,

Panel.ZIndex hilft nicht, um den Button hinter den Dialog zu bekommen?

Wie zeigst du den "Dialog" denn an? In einem Canvas o.ä, oder?

29.01.2012 - 15:42 Uhr

Hallo Disaster2k,

da kannst du dich von Positionierung von Elementen innerhalb von UniformGrid -> wie? inspirieren lassen

22.01.2012 - 21:11 Uhr

Hallo Moosbüffel,

Regex würde ich hier nicht zwangsweise verwenden.

Manuell nach Wörtern parsen und diese in Dict nachschlagen und übersetzen
(dürfte ziemlich aufwendig sein. fehleranfällig!?)

Wie schreibt Martin Fowler so schön? 😉

Zitat von: ParserFear
So why is there an unreasonable fear of writing parsers for DSLs [Domain Specific Languages]? I think it boils down to two main reasons.
You didn't do the compiler class at university and therefore think parsers are scary.

You did do the compiler class at university and are therefore convinced that parsers are scary.

In Parser builders for C#/.NET finden sich sogar einige Tools, die beim Schreiben des Parsers helfen.

22.01.2012 - 16:19 Uhr

Das Problem ist, dass eine List<T> veränderbar ist. Das muss natürlich kein Problem sein, aber ich finde es konzeptionell nicht schön.

Sehe ich ähnlich: Wenn ich von einer Property eine List<T> zurückbekomme, erwarte ich, dass Änderungen an der Liste auch von der Klasse übernommen werden, d.h. ich nicht jedes Mal eine neue Kopie der Liste erhalte.

Daher verwende ich meist IEnumerable<T> - mit Arrays hat man auch wieder das Problem, dass man im Getter kopieren muss, um sicher zu stellen, dass niemand das "interne" Array der Klasse modifiziert.

Diese Einstellung zu dem Thema hat sich bei mir hauptsächlich aufgrund von LINQ (to Objects) entwickelt:
Aus einem IEnumerble<T> kann man dadurch ganz schnell und leicht ein Array oder eine Liste machen.

Anderseits hat man (nach Aufrufen von Erweiterungsmethoden) auch häufig nur ein IEnumerable<T> und müsste somit nur zwecks Rückgabewert_ List<T>_ eine Liste daraus erzeugen.
Aufpassen muss man dann nur im Zusammenhang mit Lazy Evaluation - ich persönlich rufe daher meist ToArray() auf einen Ausdruck auf, um die Ausführung zu erzwingen. Als Rückgabewert verwende ich jedoch trotzdem_ IEnumerable<T>_.

19.01.2012 - 19:17 Uhr

Hallo hunt33r,

benutzt habe merke ich, wenn ich Eingaben im Formular mache, dass der Typ nicht stimmt.
Das bedeutet, dass ich im Formular nur String benutzen kann und somit keine Mehrdimensionalen arrays.

deine Problembeschreibung macht keinen Sinn.

19.01.2012 - 19:15 Uhr

Hallo perfekt,

siehe im Allgemeinen: [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Schaue dir an, was, in der Exception steht und guck in die Doku zu der Methode, die du aufrufst.
Sehr wahrscheinlich steht kein gültiger Wert für ein Double in der Textbox - verwende besser gleich Double.TryParse.
Beachte vor allem, dass du das richtige Zeichen zur Dezimaltrennung eingegeben hast (meist Komma auf deutschen Systemen und Punkt auf englischen) bzw. eine entsprechende Culture übergibst.

Derartige Grundlagen setzten wir hier jedoch voraus, daher ==> geschlossen.

18.01.2012 - 22:15 Uhr

Der Command bzw. das Command-Binding wird nie aufgerufen.

Welche Art von Command verwendest du?
DelegateCommand (oder vergleichbares ICommand, das den Code direkt ausführt) oder ein Routed(UI)Command?

Erstere Variante in Verbindung mit folgendem sollte eigentlich immer funktionieren:


<Button Command="{Binding Path=MyCommand}" />

Kannst du auf andere Properties des DataContext zugreifen (z.B. via Binding an die Content-Property des Buttons)?

17.01.2012 - 21:15 Uhr

Hallo kom2006,

übergib den ganzen Konvertierungsmethoden einfach die jeweilige Kultur (also "de-de", "en-us" etc.) und du bist auf der sicheren Seite.

17.01.2012 - 21:08 Uhr

Leider ist das wirklich seeeehr langsam und es stand auch irgendwo geschrieben, dass man den Dispatcher nicht so inflationär verwenden soll.

Generell gilt in solchen Situationen: Profiler nehmen und nachmessen, wo es genau klemmt.

Da diese auf der GUI darstellbar sein sollen, muss ich sie im GUI Thread erzeugen.

Diese Aussage ist falsch.
Gebundene Daten müssen beispielsweise nicht im GUI-Thread erzeugt werden, können aber sehr wohl dargestellt werden (und zwar durch DataTemplates).

Oder ist es grundsätzlich ein Fehler, DependencyObject als Basis für eine Klasse zu verwenden, deren viele Instanzen aus Daten aus einer Text-Datei zur Laufzeit generiert werden

Generell sollten nur Controls (oder genauer: Alles, was Teil von VisualTree bzw. Logical Tree ist) von DependencyObject erben.
Beim Rest macht das keinen Sinn bzw. ist schlicht nicht nötig.
Somit würde ich diese Frage mit "Ja" beantworten.

Zusammengefasst schließe ich mich talla an: Verwende "normale" Objekte und DataTemplates; dann brauchst du gar keine DOs.

13.01.2012 - 20:15 Uhr

Ich finde es in diesem Zusammenhang irgendwie "interessant", dass bei TDD immer gejammert wird, wie hoch doch die Mehraufwände sind und wie mühselig die Wartung der Tests.

Und bei Kommentaren ist der Mehraufwand dann plötzlich kein Thema mehr...
Dabei sind gute Tests auch eine sehr gute Art von Dokumentation.

12.01.2012 - 23:18 Uhr

Hallo WinstonSmith,

verwende hierzu Delegaten (siehe [Artikel] Delegaten, anonyme Methoden, Lambda-Ausdrücke & Co. ) oder besser das Strategy-Pattern.

12.01.2012 - 21:04 Uhr

Ich würde mal in die Richtung WMI suchen.

11.01.2012 - 22:47 Uhr

wenn jemand anfängt zu kommentieren, was ein Semikolon bedeutet, gehört er eher ans Fließband als vor einen PC.

Genau - ich hab ja folgendes nie behauptet: 😉

Je mehr Kommentare, desto besser

11.01.2012 - 22:45 Uhr

Was ist daran Gefrickel

Ein Screenshot einer Form zu erstellen, um ein Bild mit Text auszudrucken.

Sieht dann z.B. so aus wie im Anhang (Für einen User, der ein Netbook mit einem kleinen Bildschirm verwendet).

Und Dinge wie unterschiedliche DPI-Werte, evtl. vorhandene Eingabehilfen wie Hochkontrastmodus, unterschiedliche Window Designs, beschränkte Farbtiefe, evtl. vorhandene Tools, die Textboxen erweitern, etc. sind da noch gar nicht berücksichtigt.

11.01.2012 - 22:28 Uhr

Es gibt meiner Meinung nach keinen einzigen Grund, der dafür spricht, Kommentare einzusparen.

Doch!

Auch Kommentare müssen gepflegt werden - sonst hat man ganz schnell Fälle, in denen sich Kommentare und Code widersprechen.
Und was gilt dann?

Folgende Deklarationen sind eindeutig:


//In Millisekunden
int time;

int timeInMilliseconds;

Aber was ist hiermit?


//In Sekunden
int timeInMilliseconds;

Hier hat der Kommentar die Lesbarkeit des Codes verschlechtert.

Zudem sind Kommentare IMHO auch ein gewisses "Rauschen" im Code.

Und ob ich jetzt folgende Methode habe:


bool Exists(string item)
{
   for (int i = 0; i < list.Length; i++)
   {
      if (list[i] == item)
         return true; 
   }
   return false;
}

Oder folgende:


//Die Methode Exists. Sie gibt ein bool (System.Boolean) zurück, welches die Werte "true" oder "false" annehmen kann. Ein Boolean kann z.B. in einer if-Abfrage ausgewertet werden. Alternativ kann man das Ergebnis einer Variablen zuweisen.
//Die Methode erwartet einen Parameter vom Typ string, der "item" heißt - ein String beinhaltet eine Zeichenfolge - z.B. "Hallo" oder "Hallo Welt". Dabei kann entweder eine zuvor deklarierte und initialisierte Variable vom Typ String übergeben werden oder direkt ein Stringliteral.
//Die Methode wird aufgerufen, indem man den Methodennamen gefolgt von einem Klammernpaar schreibt, in welchem die Parameter notiert werden.
//Beispiel:
//Ein Aufruf mit Übergabe einer Variablen:
//string s = "Test";
//Exists(s);
//Ein Aufruf mit Übergabe eines Literals:
//Exists("Test");
bool Exists(string item) //Der Methodenkopf mit Rückgabetyp, Name und Parametern
{ //Die Klammer, die den Methodenrumpf eröffnet
   //Der Methodenrumpf: Hier steht der Code, der ausgeführt wird, wenn die Methode aufgerufen wird.
   //Er wird von oben nach unten ausgeführt.
   //Der Parameter "item" (siehe oben) kann hier verwendet werden wie eine Variable. Ihr Wert ist allerdings mit dem übergebenen Wert vorbelegt.
   //Eine for-Schleife: Diese wiederholt Code, der darin steht anhand vorgegebener Rahmenbedingungen
   for /*Das Schlüsselwort for, welches die Schleife einleitet*/ ( /*Die Initialiserung: Dieser Code wird einmalig vor der ersten Prüfung der Bedingung ausgeführt. In diesem Fall deklarieren wir eine Variable vom Typ int und initialisieren sie mit dem Wert 0. Ein Integer kann Ganzzahlen im Bereich von -2hoch31 bis 2hoch31 - 1 aufnehmen. In dieser Schleife fangen wir jedoch bei 0 an*/ int i = 0 /*Ein Semikolon:*/; /*Die Schleifenbedingung: Diese wird vor jedem Schleifendurchlauf geprüft. Nur, wenn sie true ergibt, wird der Code innerhalb des Schleifenrumpfes ausgeführt. Andernfalls wird die Schleife beendet. An dieser Stelle wird i (=die Schleifenvariable) mit der Länge der Liste verglichen. Nur, wenn i noch kleiner als die Länge der Liste ist, wird die Schleife erneut ausgeführt*/ i < list.Length; /*Code, der nach jedem Schleifendurchgang ausgeführt wird - hier wird i um eins erhöht (gleichbedeutend mit "i = i +  1" bzw. "i += 1" */ i++)
   { //Der Schleifenrumpf, der den zu wiederholenden Code enthält:
      //... (jetzt reicht's mir :-D)

Ich bevorzuge erstere Variante - du letztere?

11.01.2012 - 21:53 Uhr

Hallo Idontneedaname,

du bist jedenfalls nicht alleine mit dem Problem:
GPU Temperatur auslesen [==> PInvokeStackImbalance]

Auch bei mir returnt der Aufruf immer false; bei mir werkelt ebenfalls eine GTX 460.

Vielleicht hilft dir aber: GPU Observer – Sidebar Gadget (das funktioniert bei mir - und so etwas scheinst du ja bauen zu wollen)

11.01.2012 - 19:24 Uhr

Mal doch einfach das ganze Form in ein Bitmap und druck dieses aus.

Die URL trifft ziemlich genau, was das ist: Gefrickel.

Siehe besser [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)