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

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

Mitglieder
» Liste / Suche
» Wer ist online?

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

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Console32
Thema: Keine Daten enthalten, wie umgehen?
Am im Forum: Datentechnologien

if(!data.HasRows)
return false;

system.data.sqlclient.sqldatareader.hasrows

Das sind jedoch grundlagen, bitte beachte in Zukunft
[Hinweis] Wie poste ich richtig?
1.1, 1.1.1 und 2.1


Nochdazu fragst du in der Query schon ab ob ein Eintrag mit übereinstimmenden namen und passwort vorhanden ist, somit sind die If abfragen umsonst. Kurz könnte das so aussehen:


            using (SqlDataReader reader = mSql.query("SELECT * FROM Benutzer WHERE Benutzername='" + Benutzername + "' and Passwort='" + Passwort + "'"))
            {
                return reader.HasRows;
            }


Auch wenn man einen Login nicht als plain text in einer DB Speichern sollte

Thema: Captured Closure -> Ist es in Ordnung wenn lambdas die selben variablen verwenden sollen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo herbivore,

den unterscheid zwischen implicit und explicit kenne ich nicht. auch findet man zu den begriffen explicit captured closure / implicit captured closure nicht viel (nur bei implicit ein paar threads zu der R# warnung)

Ich muss gestehen, ich habe die Warnung von R# auch missverstanden, diese hat nämlich nichts mit dem gemeinsamen verwenden von variablen über mehrere Lambda Expressions zu tun(was ja durchaus gewollt sein kann), sondern mit dem ungewollten am leben halten von Großen Objekte / Potenziellen Memory Leaks.

Somit hat sich meine frage auch erübrigt ob es in Ordnung ist variablen über mehrere Lambdas gemeinsam zu verwenden. Ich stand wohl irgendwie auf dem schlauch.

Thema: Captured Closure -> Ist es in Ordnung wenn lambdas die selben variablen verwenden sollen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Community,

Ich bin gerade dabei ein übernommenes Project zu Refactoren, dabei kommt mir des öfteren die R# Warnung: "Implicite Captured Closure: ...." unter,

Nun ist mir klar was das bedeutet, jedoch bin ich mir nicht sicher ob das ganze so gewollt ist. Unabhängig davon ob es gewollt ist oder nicht, wollte ich fragen ob es Probleme geben kann wenn man das Compiler verhalten ausnutzt um die gleichen Variablen zwischen verschiedenen Lambda Expressions zu verwenden, oder ob man auf klassen variablen umsteigen soll, wenn die man mit den selben variablen arbeiten will?


mfg Console

Thema: PictureBox Invoke wird nicht ausgeführt
Am im Forum: GUI: Windows-Forms

Ich kenne ein ähnliches Problem, warum das auftritt kann ich nicht sagen.

jedoch kommt es zu seltsamen verhalten wenn ich in einem Form per BeginInvoke versuche die aktuelle Operation nach hinten zu schieben bis ein UserControl in dem Form ein Invoke ausgeführt hat. Dabei ist es auch so das das Invoke nie ausgeführt wird während mein Form immer wieder mit BeginInvoke die selbe Methode aufruft.

Versuch einfach mal das Invoke auf das Form und nicht auf die Picturebox aufzurufen.

Thema: Process.WaitForExit() wartet (scheinbar) nicht auf das Ende des gestarteten Prozesses
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Okay der Grund warum der ursprünglich code nicht funktioniert ist hier beschrieben: starting-remote-desktop-client-no-control-over-pid-kill-pid-changes-after-star

Es ist auch ein Lösungsansatz beschrieben der wesentlich schöner ist als meiner ;).

Thema: Process.WaitForExit() wartet (scheinbar) nicht auf das Ende des gestarteten Prozesses
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das Problem ist das mstsc.exe trotz WaitForExit() sofort zurückkehrt (auch wenn das Remote Fenster noch offen ist). Kannst du mit folgendem Code ausporbieren:

Process.Start(@"C:\Windows\System32\mstsc.exe").WaitForExit();
Das Programm läuft ungebremst weiter.

Mit folgendem Code hat es funktioniert:


                Process.Start(@"C:\Windows\System32\mstsc.exe").WaitForExit();
                Process.GetProcessesByName("mstsc")[0].WaitForExit();

Wirklich schön ist das nicht und wenn bereits ein "mstsc" läuft müsste man irgendwie sicherstellen das der richtige Prozess von GetProcessesByName verwendet wird.

Thema: Befüllen einer Combobox nach SelectedIndexChanged
Am im Forum: GUI: Windows-Forms

Kannst du den entsprechenden Code posten?

Mit deiner Beschreibung kann man leider nur Raten warum es nicht funktioniert.

Thema: User Control: Eigenschaften aus Eigenschaftsfenster zuordnen
Am im Forum: GUI: Windows-Forms

Hallo meldano,

So etwas ähnliches gab es schon mal UserControl mit Objekt als Property im Designer anpassen

Thema: UserControl / Panel: Was muss man tun um ein vorkonfiguriertes Panel als UserControl zu nutzen?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wenn du ein UserControl als Container Control haben willst (sprich Controlls von der Toolbox daraufziehen möchtest) genügt dieses Atribute bei deiner UserControl Klasse

    [Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]

Thema: Unterschied zwischen i+=1 vs. i=i+1 bei Bytes
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das liegt daran das es keinen + Operator für bytes gibt, da diese nicht für Rechenoperationen gedacht sind. Das Problem ist also das dein byte zu einem int convertiert wird (nicht nur weil die Zahl als int interpretiert wird).

Du kannst keine 2 bytes addieren und einem byte zuweisen.

Warum jedoch += funktioniert weis ich nicht.

Thema: TextBox KeyDown - Zahlen aus Numblock haben falschen Ascii Wert
Am im Forum: GUI: Windows-Forms

Das Mapping von KeyValue (dem tatsächlichen input wert) auf einen KeyChar gibt es leider nicht im Framework.
Wenn du im KeyDown bereits den aus der KeyValue resultierenden Char willst hilft dir vielleicht dieser Beitrag weiter: Get the char on Control.KeyDown?

PS: @CoLo nein KeyValue ist nicht KeyChar du bekommst für KeyValue immer den selben Wert für die taste Z unabhängig vom Tastaturlayout / Shift Taste etc.

Thema: Event in Form aus Klasse starten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Du solltest für events immer EventHandler delegates verwenden / eine eigene EventArgs Klasse definieren.

Und das Prefix "On" steht für die Methode dein ein event feuert nicht für das event Selbst.

 public static event EventHandler<EventNameEventArgs> EventName;

        public class EventNameEventArgs : EventArgs
        {
            private bool visible;

            public bool Visible
            {
                get { return visible; }
                set { visible = value; }
            }
        }

        public void OnEventName(bool visible)
        {
           var handle = EventName;
            if(handle != null)
                handle(this,new EventNameEventArgs { Visible = visible };
        }

sprachen mischen finde ich Persönlich immer furchtbar hässlich ;)

Thema: VS AddIn Programmierung dll kann nicht gelöscht werden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich kenne das Problem als Workaround kannst du dir eine Kleine exe schreiben die die aktuelle DLL umbenennt und das ganze als Prebuild per cmd Parameter aufrufen.

visual-studio-2010-build-file-lock-issues

Thema: DataGridView: Zellen aufgrund von Bedingungen einfärben
Am im Forum: GUI: Windows-Forms

Hallo das ist relativ einfach du musst doch nur über alle Reihen iterieren sehen ob die Id anderes ist als beim letzten Durchlauf und dann die Farbe setzten.

Thema: [erledigt] WPF: Combobox und SelectionChanged und Text
Am im Forum: GUI: WPF und XAML

Da es sich um eine ComboBox handelt arbeitet man mit dem aktuellen Item, nicht mit dem Text (ebenso wie bei einem ListView)

Das man immer Casten muss liegt daran das man den Items auch Komplexe Klassen zuweißen kann die ComboBox ruft dann immer das ToString des objects auf. Warum es keine Generische Version von ComboBox gibt bei der du den Typ der Items festlegen kannst weiß ich nicht.

Thema: [erledigt] WPF: Combobox und SelectionChanged und Text
Am im Forum: GUI: WPF und XAML

comboBox1.SelectedItem
gibt dir nicht das richtige zurück?

Thema: WPFMessageBox
Am im Forum: GUI: WPF und XAML

Was ist der Unterschied zur Framework Klasse ?

MessageBox Class

Thema: Threading: Worker-Thread soll Main-Thread Bescheid sagen, wenn er fertig ist
Am im Forum: Rund um die Programmierung

BackgroundWorker Class enthält ein Event für Complete.

Möglichkeiten das zu Realisieren gibt es viele, jedoch sind das alles Grundlagen. Bitte Beachte [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1.

Thema: VB.NET / Dispose Muster (nicht nur) bei SharpDX
Am im Forum: Rund um die Programmierung

Grundsätzlich gilt für Finalizer (afaik):

Finalize nur impementieren wenn deine Klasse direkt unmanaged Resources hält.
wenn diese bereits in einem Wrapper vorhanden sind, sollte der Wrapper im Finalize bereits alles nötige erledigen.

In diesem Fall nur bei disposing = true, das Dispose des Wrappers aufrufen.

Thema: Textbox auf erstes Zeichen (0) überprüfen und nicht zulassen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

warum musst du auf zahlen überprüfen du kannst doch einfach auch auf das Zeichen prüfen ??


if(!string.IsNullOrEmpty(textBox.Text) && textBox.Text[0] == '0')
    textBox.Text = textBox.Text.Substring(1);

Thema: Schnittstelle, Interface und Instanz eines Objekts
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Dein Interface sollte auch als interface definiert sein. wenn du es richtig gemcht hättest wäre es nicht möglich die Property als public zu definieren (da interface member immer public sind und der compiler das public nicht akzeptiert).

wenn ich das ganze nachbau mit simplen klassen, funktioniert es so wie es sollte.

       public interface ITest
    {
        ComplexClass ComplexClass { get; set; }
    }

    public class ComplexClass
    {
        public int Id { get; set; }
    }

    public class Form2 : Form, ITest
    {
        public ComplexClass ComplexClass { get; set; }
    }

    public class Form3 : Form, ITest
    {
        public ComplexClass ComplexClass { get; set; }
    }

Thema: Ist lock fair? Bekommen die Threads in der Reihenfolge Zugang, in der sie die Sperre anfordern?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

So das ganze nochmal überarebietet:

 
    public class Lock : IDisposable
    {
        private readonly object lockObject;
        private static readonly ConcurrentDictionary<object, Ticket> Tickets = new ConcurrentDictionary<object, Ticket>();

        public Lock(object lockObject)
        {
            if (lockObject.GetType() != typeof(object))
                throw new ArgumentException("lockObject");

            this.lockObject = lockObject;
            Ticket ticket = Tickets.GetOrAdd(this.lockObject, (key) => new Ticket() { TicketCount = 0, CurrentTicket = 1 });

            int myTicket = Interlocked.Increment(ref ticket.TicketCount);
            Monitor.Enter(this.lockObject);

            while (true)
            {
                if (myTicket == ticket.CurrentTicket)
                    return;

                Monitor.Wait(this.lockObject);
            }
        }

        public void Dispose()
        {
            if (this.lockObject != null)
            {
                Interlocked.Increment(ref Tickets[this.lockObject].CurrentTicket);
                Monitor.PulseAll(this.lockObject);
                Monitor.Exit(this.lockObject);
            }
        }

        private class Ticket
        {
            public volatile int CurrentTicket;
            public volatile int TicketCount;
        }
    }

Thema: Ist lock fair? Bekommen die Threads in der Reihenfolge Zugang, in der sie die Sperre anfordern?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von herbivore

Dafür habe ich einen weiteren, noch nicht genannten Punkt. Wenn Monitor tatsächlich nicht FIFO wäre, dann könnte dein Code Stravation verursachen, wenn immer wieder der gleiche Thread, der eigentlich noch nicht dran ist, sich vordrängelt und als erster die Sperre bekommt, nur um festzustellen, dass er noch nicht dran ist und damit den Ablauf neu in Gang zu setzen, bis in alle Ewigkeit.

Das sollte nicht Passieren, da die vorgedrängelten Threads auf das Wait laufen, und dort solange stehen bis ein Thread im Dispose() das PulseAll() aufruft. Zumindest nach meinem Verständniss.

Thema: Ist lock fair? Bekommen die Threads in der Reihenfolge Zugang, in der sie die Sperre anfordern?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke, ich kenne die Optimale implementierung von Dispose, ändert jedoch nichts an der Funktionalität (und kann man ja gerne selber auf ein private Dispose(bool disposing) umschreiben).

Das einfügen ins Dictionary muss synchronisiert sein (habe ich oben eingefügt), danke für den hinweiß, die Integer Operation sind durch das Interlock threadsicher. (ich habe trotzdem die felder auf volatile geändert).

Das die Felder public sind liegt am ref der Increment Methode, da es sich um eine private Klasse handelt die nur zwei Zahlen kapselt habe ich beide als felder deklariert. Kann man auch ändern wenn es stört.

Thema: Ist lock fair? Bekommen die Threads in der Reihenfolge Zugang, in der sie die Sperre anfordern?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo herbivore,

Die Aussage das es keine .NET Klasse gibt die wartende Threads in FIFO Reihenflolge abarbeitet stammt ebenfalls aus der Antwort im genannten Thread. Natürlich kann ich nicht sicherstellen das diese Richtig ist...

Mutex Objects (Windows) schreibt ebenfalls:

Zitat
If more than one thread is waiting on a mutex, a waiting thread is selected. Do not assume a first-in, first-out (FIFO) order. External events such as kernel-mode APCs can change the wait order.

Die Funktionalität selbst implementieren kann man natürlich immer.
Könnte so aussehen: Funktioniert nur mit instanzen von object als lockObject! (da ich es nur so brauche)


    public class Lock : IDisposable
    {
        private readonly object lockObject;
        private static readonly Dictionary<object, Ticket> Tickets = new Dictionary<object, Ticket>();
        private static readonly object TicketLock = new object;

        public Lock(object lockObject)
        {
            if (!lockObject.GetType().Name.Equals("Object", StringComparison.InvariantCultureIgnoreCase))
                throw new ArgumentException("lockObject");

            this.lockObject = lockObject;

            if (!Tickets.ContainsKey(this.lockObject))
            {
                lock (ticketLock)
                {
                    if (!Tickets.ContainsKey(this.lockObject))
                        Tickets.Add(this.lockObject, new Ticket() { TicketCount = 0, CurrentTicket = 1 });
                }
            }

            int myTicket = Interlocked.Increment(ref Tickets[this.lockObject].TicketCount);
            Monitor.Enter(this.lockObject);
            while (true)
            {
                if (myTicket == Tickets[this.lockObject].CurrentTicket)
                    return;
                else
                    Monitor.Wait(this.lockObject);
            }
        }

        public void Dispose()
        {
            if (this.lockObject != null)
            {
                Interlocked.Increment(ref Tickets[this.lockObject].CurrentTicket);
                Monitor.PulseAll(this.lockObject);
                Monitor.Exit(this.lockObject);
            }
        }

        private class Ticket
        {
            public volatile int CurrentTicket;
            public volatile int TicketCount;
        }
    }


EDIT: Überarbeitete Version weiter unten!


using (new Lock(this.myLock))
{
     ///....
}

Thema: Ist lock fair? Bekommen die Threads in der Reihenfolge Zugang, in der sie die Sperre anfordern?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von herbivore
diese Aussage wird in Thread Synchronization Fairness in the .NET CLR gemacht.

Nein meine Aussage basiert auf der Antwort in diesem Thread Is there a synchronization class that guarantee FIFO order in C#?
die ebenfalls einen verweiß auf das von abt genannte buch/den genannten Absatz enthält.

Thema: Ist lock fair? Bekommen die Threads in der Reihenfolge Zugang, in der sie die Sperre anfordern?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Es gibt in .Net keine Synchronisationsklasse die die Wartenden Threads garantiert in FIFO Reihenfolge abarbeitet.

Thema: 4 Byte in eine Float umwandeln gemäß IEEE 754
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von Eystorhaf
Bytes: 5, 6, 3, 4
66, 19, 78, 99
Hex 42, 13, 48, 63

Also bei mir ist 66, 19, 78, 99
als hex: 0x42134E63.
mit folgendem Code:


                float test = BitConverter.ToSingle(new byte[] {99,78,19,66}, 0);
bekomme ich: 36.82655

genau wie mit diesem Converter http://gregstoll.dyndns.org/~gregstoll/floattohex/

Thema: 4 Byte in eine Float umwandeln gemäß IEEE 754
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Bzw deine bytes sind falsch, laut IEEE 754 ist 36,8 als bytes:
0x421B3333 als hex bzw
66, 27, 51, 51 oder in verkehrter Reihenfolge..

Thema: 4 Byte in eine Float umwandeln gemäß IEEE 754
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

eigentlich nichts, ich bekomme meine float als String mit Hexzeichen, sieht ähnlich aus:

                    uint floatAsInteger = uint.Parse(value.hexString, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture);
                    byte[] floatAsBytes = BitConverter.GetBytes(floatAsInteger);
                    return BitConverter.ToSingle(floatAsBytes, 0);

und funktioniert einwandfrei, muss an deiner Reihenfolge liegen.