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 rollerfreak2
Thema: foreach-Laufvariable bekommt einen Wert, der nicht in der Liste vorkommt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Bescheib mal bitte dein Problem, ich für meinen Teil versteh es nämlich nicht.

Thema: Bestimmten Textblock löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Schau dir auch auf jeden Fall mal die Lookaheads and LookBehinds an, in deinem Fall vorallem die positiven. Tutorial

In Worten ist dein Regex ja denk ich in der Art.

Schau nach GFXELEMENTID: 210, anschließend jedes belibige Zeichen und schließe ab mit GFXELEMENTID.

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo herbivore,

danke noch mal für den Link. Der 2te Link von Th69 sah auch viel verprechend aus und funktioniert soweit ohne Fehler. Er ist auch sehr schnell, ob nun aber die Implementierung deines Links oder des externen schneller ist, habe ich noch nicht ausprobiert.

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Für Reguläre-Ausdrücke gibt es ein klasse Tool (Regex-Lab) von herbivore mit dem man Patterns erstellen / testen kann: Regex-Lab

Das weis ich schon danach habe ich ja gar nicht gefragt.
Zitat
Ein Regex-Tutorial gibt es hier: Regex Tutorial

Ich weis mit Regex um zu gehen, es ging nur darum nicht etwas zu implementieren was es bereits gibt. Und dazu hat Th69 die passende Antwort gehabt.

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
In der Klasse hast du ein Feld für den Zahlenwert und ein Feld für den String Wert.

Wie gesagt der Wert liegt als STRING vor, deine Lösung funzt also so nicht. Ich müsste erst die digits nach einem speziellen pattern extrahieren, wie ich oben aufgezeigt habe. Das ist ja eigentlich die Problem Stellung, deine aufgezeigte Lösung setzt die eigentliche Lösung ja schon voraus.

Die beiden Links von Th69 sehen sehr vielversprechend aus. Die schau ich mir mal an. Danke

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Die strings liegen als string's vor, daher ein Comparer Implementieren und dort dann das CompareTo implementieren.

Fertige Sortierungen:

"affe_1", "egon_2"

"af2fe_1", "af2fe_2", "af2fe_11"

"af1fe_2", "af2fe_1", "af2fe_11"

....

Zitat
Willst du nur nach der Zahl sortieren oder spielt der String, der vor der Zahl steht, auch eine Rolle?

Siehe Muster oben.
Zitat
Trifft auf jeden String das Must item_x (x ist eine Zahl) zu?

Nein, ich würde es mal so matchen: "^[A-Za-z0-9_]*(\d)+"
Zitat
Wie liegen dir die Strings vor? Als List oder Array oder... ?

Also generische list, aber was hat das mit der Frage zu tun?


list.Sort(new MyComparer());

Thema: Compare strings special order [natural sorting]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

eine kleine Frage bezüglich string compare. Ein normaler string compare "sortiert" folgende 3 strings "item_2", "item_1", "item_11".

Das Ergebnis lautet wenig überaschend: "item_1", "item_11", "item_2".
Ich möchte aber folgendes "item_1", "item_2", "item_11". Dabei soll es aber auch egal sein, was hinter der Zahl steht. Daher "item_1z" kommt vor "item_11".

Gibt es da irgendeine Compare logik die das schon beherscht, oder muss ich selber via Regex anfangen was zu implementieren.

Mein Plan wäre foldender:

1) Mit regex aus beiden string's den kompletten Anfangsteil + Digit's extrahieren.
2) Ist einer von beiden matches negativ, den normalen string compare anwerfen.
3) Sind beide matches positiv, dann wird zu erst geprüft ob die beiden "anfangs" string gleich sind, wenn nicht wieder den normalen string compare anwerfen
4) Bin ich bis hier her gekommen einfach die beiden Zahlen miteinander vergleichen, sind diese zufällig gleich, dann einfach den normalen string compare anwerfen

Hat jemand einen besseren Vorschlag?

Thema: Basistyp von generischer Klasse bekommen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Herbivore,

das müssen war etwas zu drastisch formuliert. Sollten wäre wohl eher angebracht. Ich hab jetzt ein public Interface eingeführt, welches das private erbt. Dann funzt es natürlich bestens.

Thema: Basistyp von generischer Klasse bekommen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Da ich nicht auf Reflection zurück greifen will, werd ich wohl eine Interface definieren müssen. Danke für das Feedback.

Thema: Basistyp von generischer Klasse bekommen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich hab ein Problem und weis nicht wie ich das am "besten" löse. Folgendes ist gegeben:


internal class MyBaseClass<T> : IMyInterface
{
    ....
    ....
    public void DoWork();
}

internal class Helper
{
    private IMyInterface m_member;
    
    public void DoSomething()
    {
        //here i want to call the DoWork method of the base class
        //that does not work because T is not known
        ((MyBaseClass<T>)m_member).DoWork();
    }
}

MyInterface ist ein geschlossenes Interface daran kann ich es nicht packen. Klar ich könnte eine weiteres Interface machen wo ich dann die DoWork Methode rein packe. Ich könnte auch die Helper Klasse generisch machen, um dann das entsprechenden generischen Typen zu haben und einfach casten zu können.

Mein Frage jetzt ist aber, kann ich irgendwie den generischen Typen der Basisklasse raus bekommen, um die Methode ohne Interface bzw. generische Erweiterung zu callen?

Thema: [erledigt] Auf Member zugreifen über String
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ja wenn du das vor hast must du dir einen indexer schreiben und die internen bools in eine dictionary speichern. Was das allerdings für ein Sinn hat sei mal dahin gestellt.

Thema: Doppelklick auf Item in ListView soll Itembezogenes Ereignis auslösen
Am im Forum: GUI: Windows-Forms

Du kannst aus den mitgelieferten MouseEventArgs das Item berechnen. Ich glaub da gibt es eine Mehtode am ListView Control mit der du aus einem Point das Item extrahieren kannst.

Thema: Culture Changed Event
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
ich vermute, damit ist gemeint, dass das Control das Form nicht kennt.
genau so war es gemeint. Ich schau mal ob ich das über ein Interface mit Event oder über ein Interface mit Methoden Aufruf löse.

Thema: Culture Changed Event
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Okay das hilft schon mal, besser wäre es allerdings wenn es dieses Event an jedes Control weiter propagiert würde (zumindest für meine Zwecke) weil ich das Form Control nicht kenne.

Thema: Culture Changed Event
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

gibt es in c# eine Möglichkeit das Culture Change Ereignis (UI Culture) mit zu bekommen, daher ein entsprechendes Event zu abonieren? Oder ist das nur über die Win API möglich?

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

die Abfrage nach if (async && m_aborted) ist unnütz. Das m_aborted flag ist im Sync Falle sowieso immer auf false. Und im Async Fall ist es halt entweder false, oder true. Von daher ist die "zusätzliche" abfrage nach dem sync/async flag nicht notwendig bzw. überflüssig.

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
beim AutoResetEvent ist ein Aufruf von Reset nicht notwendig denn das passiert Auto im Gegensatz zum ManualResetEvent.

Hab ich auch grad gesehen, das wird beim Aufruf von WaitOne automatisch gesetzt.
Zitat
Den Code für GetModiSync und Async könntest du dann noch in eine Methode auslagern und per Flag mitteilen ob sync/async ist und dann halt nicht auf das WaitHandle warten oder eben doch

Der Interrupt muss IMMER sein, daher sowohl bei Sync als auch bei Async!

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo herbivore,

ich glaub jetzt hab ich verstanden wie das von dir Beschreibende Prinzip funktioniert. Zum einen bleibt die boolsche Variable bestehen, die zum beendet verwendet wird. Die kann nur gesetzt werden wenn die GetModi Methode in einem Thread ausgeführt wird, daher Async. Und nun einfach die Logik herum drehen, einfach ein WaitOne zu rufen, und im Falle die Methode soll abgebrochen werden, die boolsche Variable setzen und am AutoResetEvent Set aufrufen.


private void GetModiAsync()
{
    //this method is executed in a separat thread
    ...
    if (this.m_aborted) return;
    ...
    if (this.m_aborted) return;
    ...
    this.m_autoResetEvent.WaitOne(interruptTime);
    this.m_autoResetEvent.Reset();
    ...
    if (this.m_aborted) return;
    ...
}

public void ThreadAbord()
{
    this.m_aborted = true;
    //force the thread to stop the interrupt
    this.m_m_autoResetEvent.Set();
}

Hat zwar lang gedauert bis ich es kapiert habe, aber besser später als nie :D

Danke für den echt hilfreichen Ansatz.

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Es gibt eh nur einen der bisher gepostet wurde und nicht von dir ist ;-)

Sorry, den hab ich übersehen :D
Zitat
Der Unterschied zu herbivores Vorschlag oben ist also dass jederzeit abgebrochen werden soll und nicht während des Wartens. Korrekt?

So ist es aber das habe ich auch eingangs auch erwähnt und so geht es eigentlich auch aus dem ersten Code Post heraus dachte ich. Die Bilder hätte ich gleich anfangs schon mit posten können, das wäre sicher eleganter gewesen.
Zitat
Ist es möglich das Abbrechen so handzuhaben dass beim Abbruch die asynchrone Ausführung normal zu Ende läuft aber dessen Ergebnis (sprich das Callback) ignoriert / nicht verwendet wird?

Nein das ist leider nicht möglich, weil der Service Disposed wird, daher soll auch der Thread "sofort", bzw. ziemlich bald beendet werden, damit der Service dispose aufruf zurück zum Aufrufer kehrt.
Zitat
* auch wenn du vor und nach jedem Metodenaufruf ein (volatile) bool prüfst wäre das nicht jederzeit - wenn man es genau nimmt

Das ist mir klar, jedoch ist das besser, als am Thread.Abort aufzurufen.

Fazit, ob Timer oder Thread.Sleep ist eigentlich Schnuppe. Beim Thread.Sleep wird halt nicht gepolled.

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
So wie das Bild jetzt da ist wärs genau mein obiger Code.

Welchen obigen Code meinst du denn? Wenn du den Task<TResult> meinst, im PDF unter for the future, den Task kann ich nicht verwenden => .NET 2.0.

Das unterbrechen der Methode durch den User kann nur erfolgen, wenn die Methode Async aufgerufen wird. Das unten stehende Diagramm zeigt den Async aufruf. Dort kann die Methode zu jeder Zeit beendet werden. Daher immer dann wenn das aborted flag gesetzt wird soll der Thread beendet werden.

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo herbivore,

ich finde das überhaupt nicht offensichtlich. Desweiteren "denke" ich das ich falsch verstanden wurde.

Zitat von herbivore
wenn man in einem Vorgang eine bestimmte Zeitspanne warten will, den Vorgang aber auch während dieser Zeitspanne abbrechen können will...
Das Wort während ist falsch, es ist zu jedem Zeitpunkt der Ausführung möglich die GetModi Mehtode abzubrechen. Ich glaube unten stehendes Diagramm verdeutlicht das was ich erreichen will etwas. Nehmen wir mal nur die Sync methode, diese kann auch nicht abgebrochen werden! Den Aufruf der GetModi sync findet im GUI Thread statt. Laut deiner Aussage ist das pollen dort nicht mehr notwendig wenn man die Denkweise umdreht.
Zitat von herbivore
den Vorgang aber auch während dieser Zeitspanne abbrechen können will, bietet es sich an, die Sache gedanklich umzudrehen, also vorrangig auf den Abbruch zu warten, aber das maximal eine bestimmte Zeitspanne lang, sprich z.B. einen AutoResetEvent mit TimeOut zu verwenden. Damit vermeidet man jede Art von Polling
Leider hab ich keinen Plan wie das gehen soll, wenn man in der im Diagramm dargestellten Methode eine Pause machen soll, ohne zu pollen?

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Okay das mit dem abbrechen das habe ich verstanden. Wie aber soll ich damit die "Pause" erreichen? Kannst du das bitte noch mal ein bisschen genauer Erklären?

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
welche .net-Version verwendest du?

Wir sind leider auf 2.0 beschränkt! Das von herbivore vorgeschlagene klingt zwar gut, löst aber das Problem des Wartens nicht, oder ich hab es nicht richtig verstanden. Also die Methode GetModi soll zu jeder Zeit abbrechenbar sein! Desweiteren soll die Methode an einer bestimmten Stelle im Code eine bestimmte Zeit warten, ohne jedoch die Methode zu verlassen.

Das mit dem AutoResetEvent schau ich mir mal an. Wer raised das denn, und wie beende ich dann die Methode? Und was hat das mit der von mir erwähnten Pause zu gemeinsam?

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Alternative zu Thread.Sleep ist ein Timer.

Die 2 Vorschläge habe oben schon aufgeführt. Nur welcher ist besser?
Zitat
Wie bekommt die GetModi-Methode den Wert für die Pause mitgeteilt?
Die GetModi Methode berechnet die Pause anhand von Daten die es im GetModi von der Peripherie bekommt.
Zitat
Auch wenn es Vorgabe ist das synchron aufzurufen kann die Ausfürhung nebenläufig erfolgen.

Ich denke das geht nicht, weil den Aufruf kann ich nicht beeinflussen. Daher derjenige der mich ruft erwartet das Ergebnis im Return Value der Methode. Daran kann man leider nix Ändern, sprich über ein Event synchronisieren ist leider nicht möglich.

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Zitat
Wie wird übrigens die Pause berechnet?

Das ist von einigen Dingen der Peripherie abhängig, das kann/darf ich hier nicht genauer erklären. Wichtig ist, im normal falle sind die Interrupts/pausen im Millisekunden Bereich, 300-800ms. Von daher friert die GUI nicht gleich ein.
Zitat
Die UI sollte nie warten, denn sonst friert sie ein.

Da hast du eigentlich recht, nur folgende Randbedingung sind einzuhalten. Die Methode integriert sich in ein Framework welches die Methode auch synchron aufruft, daher erwartest es auch das Ergebnis synchron. Dem entsprechend kann ich dort den Aufruf leider nicht beeinflussen.

Thema: Method Interrupt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen, ich beschreibe erstmal die Randbedingungen. Eine Methode berechnet einen Modus an einer verbunden Peripherie. Diese Berechnung erfordert eine "Pause" die dynamisch ist, daher berechnet wird. Sprich die Methode fragt einige Dinge an, muss dann kurz pausieren (das kann man leider nicht Ändern, das ist ein MUSS), und fragt dann noch ein paar dinge ab. Anschließend hat die Methode alle nötigen Daten um den Modus zu berechnen.

Die Methode hängt an einem Service welcher im GUI Thread erzeugt wurde. Nun gibt es 2 Möglichkeiten den Modus anzufragen. Zum einen Synchron, daher direkt. Zum anderen asynchron, daher im Service selber wird die Methode in einem separaten Thread ausgeführt. Ist der Thread beendet, wird dem Caller der Asynchronen Methode via Callback bescheid gegeben, das dass Ergebnis des Modus nun vorliegt.

Wird die Async Methode ausgeführt, so gibt es noch die Möglichkeit den Berechnung abzubrechen. Dazu wird einfach eine boolsche Variable gesetzt, welche im Thread immer wieder abgefragt wird, und im falle diese ist true, wird via return die Methode die dem Thread zugeteilt ist verlassen und damit die Berechnung beendet.

Mir geht es jetzt um das Design des Interrupts. Klingt vielleicht einfach, jedoch gibt es da wie immer mehrere Ansätze. Mir fallen Spontan 3 Stück ein. Die GetModi Methode liefert den Modus. Diese kann entweder direkt gerufen werden, oder über einen separaten Thread. Daher muss die GetModi() Methode immer wieder das oben genannte bool abfragen (volatile aborted).


Modi GetModi()
{
    ....
    if (aborted) return Modi.Aborted;
    ....
    if (aborted) return Modi.Aborted;
    ....
    //here we need the timer interrupt for example 4000 ms
    //we could not ask for the aborted flag during the interrupt
    Thread.Sleep(4000);
    ....
    if (aborted) return Modi.Aborted;
    ....
}


Modi GetModi()
{
    ....
    if (aborted) return Modi.Aborted;
    ....
    if (aborted) return Modi.Aborted;
    ....
    //here we need the timer interrupt for example 4000 ms
    Timer t = new Timer(4000);
    this.m_interruptReached = false;
    t.Elapsed += this.Elapsed;
    t.Start();
    while (!this.m_interruptReached)
    {
        //polling... 
        if (aborted) return Modi.Aborted;
    }
    t.Stop();

    ....
    if (aborted) return Modi.Aborted;
    ....
}

void Elapsed(object sender, EventArgs args)
{
    this.m_interruptReached = true;
}


Modi GetModi()
{
    ....
    if (aborted) return Modi.Aborted;
    ....
    if (aborted) return Modi.Aborted;
    ....
    //here we need the timer interrupt for example 4000 ms
    //we could ask for the aborted flag between the time interrupt
    for (int i = 0; i < 8; ++i)
    {
        Thread.Sleep(500);
        if (aborted) return Modi.Aborted;
    }
    ....
    if (aborted) return Modi.Aborted;
    ....
}

Ich weis, Thread.Sleep ist nicht schön, jedoch hätte es den Vorteil, das während des Sleeps ein anderer Thread die CPU Power bekommt, das wäre im 2ten Beispiel nicht der Fall (Polling). Gibt es für solche UseCases ein Design Pattern, mir ist dafür leider keines bekannt. Was sagt Ihr dazu, wie würdet ihr das Designen mit den gegebenen Vorgaben?

Thema: BinaryFormatter mit Umlaute (ÄÜÖß)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Mal ne andere Frage, du sagst es gehen die Umlaute verloren, gehen die wirklich schon beim Serialisieren verloren, oder erst beim lesen?

Thema: In Liste suchen und löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Stimmt, aber ich nenne ich trotzdem manchmal so :-)

Korrekterweise sollte man aber Lambda Operator dazu sagen.

Thema: BinaryFormatter mit Umlaute (ÄÜÖß)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Siehe dazu die MSDN. Den Filestream kann man ein Encoding mitgeben.

Thema: In Liste suchen und löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Oder wolltest du wissen wie man den Operator => nennt?

Ich nenne den Queryoperator bzw Lambdaoperator.