Laden...

Forenbeiträge von Seikilos Ingesamt 753 Beiträge

21.05.2007 - 13:47 Uhr

Klingt kompleziert genug, um es nicht zu tun 🙂 da wäre es wohl doch leichter zu warten, bis ich die andere Seite der seriellen Verbindung wieder in die Finger bekomme.
Werd dann mal den Monitor testen.

21.05.2007 - 13:26 Uhr

Kann ich eigentlich sowas wie eine serielle Verbindung faken?
Ich benutzt SerialPort(Com,baud) um eine Verbindung zu der Schnittstelle aufzubauen.
Aber kann ich ein Programm schreiben, dass quasi so tut, als würde es auf einem bestimmten COM Port sitzen?
Und mein Hauptprogramm verbindet sich dennoch mittel ne SerialPort(..);

?

21.05.2007 - 12:31 Uhr

Werd ich testen, danke!

21.05.2007 - 12:01 Uhr

Ja stimmt schon, aber ich kosumiere Zeichen beim lesen und würde gerne quasi eine rohe Ansicht des Traffics über diesen Port sehen. Hex/String oder sowas

21.05.2007 - 11:32 Uhr

Ich hab keine Probleme eine serielle Kommunikation aufzubauen, dort schieb ich Strings hin und her von Gerät A nach Gerät B nur hab ich das Problem, dass die Kommunikation nicht vollständig funktioniert und ich kann zwar die C # Seite debuggen, aber nicht die andere Seite.
Daher meine Frage, gibt es eine Möglichkeit irgendwie den Seriellen Port zu überwachen und alle eingänge und Ausgänge als Text darzustellen?

17.05.2007 - 14:47 Uhr

Junky wird bei mir schwierig. Es wird von einem Stream gelesen und die Methode säubert den Stream zu beginn, beim suspenden ja nicht, aber bei abort und neustart würde der Stream gelöscht werden und es würden daten flöten gehen.

Das mit Manual Reset scheint schon besser, aber nichts desto trotz würde der Thread weiterhin laufen und laufen, nur halt nicht den ganzen code ausführen

17.05.2007 - 12:53 Uhr

In der Suche gibts nen Thread über mein Problem. Ich möchte einen Thread anhalten.
Thread.Suspend() ist aber, wie bekannt veraltet. Es wird empfohlen Monitor, Mutex usw für sowas zu benutzen.

Da auf den letzten Thread mit dem Thema der letzte Beitrag 2005 war hab ich mir erlaubt einen neuen aufzumachen (wenns falsch war, bitte dran hängen)

Bei mir ist das gleiche Problem, ich möchte keine veralteten Befehle nutzen aber gleichzeitig brauch ich im Grunde keine Kontrollstrukturen wie Monitor um Threads zu synchronisieren oder Ressourcen zu schützen, es geht mir wirklich nur darum, dass der Benutzer einen Thread einfach anhalten kann (was ja suspend wäre) und irgendwann wieder mit resume fortsetzen. Es geht dabei nicht um Ressourcen oder ähnliches, sondern um die Tatsache, dass ein Thread pausiert werden soll, ohne abgebrochen zu werden und wirklich pausiert wird und nicht mit Flags an der ausführung des Codes gehindert wird wobei der Thread weiter aktiv ist.

Bietet sich in dem Falle dennoch eine Nutzung von Mutex an? (Ressourcen darüber gibt es genug, ich will mir nur mehr arbeit ersparen)
Und Mutex und konsorten werden halt immer mit synchronisationsprozessen in einem Satz aufgeführt, die ich einfach nicht habe 🙂

17.05.2007 - 12:46 Uhr

Ok, werd ich mir angucken, aber dass ist dann die Sache der WindowsForm, wie sie dies implementiert, gut zu wissen.

Danke

17.05.2007 - 12:00 Uhr

Ich hab folgendes Szenario:

Klasse A hat ein public event.
Eine Klasse A startet einen Thread, welcher eine Methode der Klasse A threaded.

Die gethreadete Methode ruft irgendwann dieses public event auf und löst es aus.
Soweit so gut.

Nun hab ich eine WindowsForm, welche diesen Event fangen will. Das endet jedoch immer in der Exception:


InvalidOperationException
Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement textProtocol erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.

Klar macht ja auch sinn, da die Sicherheitsfunktion von C# verhindert, dass Thread der Klasse A und der WindowsForm Thread sich gegenseitig beeinflussen.

Nun will ich dies aber zulassen, sprich WindowsForm soll auf das Event des anderen Threads reagieren dürfen, wie löse ich das möglichst gut?

Ich kenne die Holzhammer Methode

CheckForIllegalCrossThreadCalls = false;

Damit schalt ich einfach die Prüfung ab, es kommt keine Fehlermeldung, aber das Problem löst sich dadurch ja nicht.

Wie würde man solch ein Szenario generell angehen?

Edit: Achja, ich hab gesucht und auch schon etwas ähnliches gefragt, was hierhin verweist: Controls von Thread aktualisieren lassen (Invoke-/TreeView-Beispiel)
Da wird nur das Problem des übergreifens in den Thread verlagert, so wie ich das sehe. Was bei mir nicht geht. Da ich ja nicht weiß, wer sich später alles an das event hängt.

Zudem schein ich das Problem nicht ganz zu verstehen.
Zitat von Herbivore

Alle Zugriffe auf GUI-Elemente (Controls, Form u.ä.) müssen aus dem Thread heraus erfolgen, der sie erzeugt hat. Wenn man sich nicht daran hält und aus einem extra Thread direkt auf GUI-Elemente zugreift...

Was ich meiner Meinung nach aber garnicht tu, ich benachrichtige den Event mit ein paar Parametern, ein int, String usw.
Und jeder der zuhört, sollte einfach diese Parameter für sich nutzen, sei es um diese in einem Textfenster auszugeben (aber genau da bekomm ich ja die Fehlermeldung).

Es ist ja nicht so, als würde Thread in Klasse A versuchen direkt auf die WindowsForm zu zugreifen. Sondern den anderen Thread nur benachrichtigen

08.05.2007 - 10:52 Uhr

Nope, aber danke für den Tip

08.05.2007 - 10:16 Uhr

Ja, ist ungefähr das selbe, ich brauchte die ms zum benchmarken

07.05.2007 - 17:17 Uhr

Ich probiere gerade das hier:


DateTime n = DateTime.Now;

int diff = (DateTime.Now-n).Milliseconds;
double diff2 = (DateTime.Now-n).TotalMilliseconds;

Da kommen aber konfuse werte raus, bei beiden

07.05.2007 - 17:09 Uhr

Gibt es eine Möglichkeit now in milisekunden zu bekommen, ohne alles per hand rechnen zu müssen?
Ich guck hier schon im manual rum, es gibt toLongdate usw, aber nichts davon gibt mir die anzahlder milisekunden. Und Now.miliseconds ist es nicht! 🙂

07.05.2007 - 09:13 Uhr

Recth hast du.
Was heiißt denn :
.NET Compact Framework
Unterstützt in: 2.0
Heißt das es unterstützt das CF 2.0 ? Oder das normale Framework 2.0?

06.05.2007 - 23:04 Uhr

Ich bin an einem Punkt, an dem ich PointF für mehr als zwei Dimensionen brauche, genaugenommen 3 🙂 Und befor ich mir da selber was programmiere, würd ich gerne wissen, ob es einen Datentyp gibt, welcher 3 Punkte speichern kann und ein struct ist

06.05.2007 - 18:54 Uhr

@Kovu, denkst du

@win, müsste aber ähnlich ablaufen, aber ich denke schneller als neumachen 🙂

06.05.2007 - 18:49 Uhr

Was quasi das if wäre 😉

@Kovu, ja da war ich schon, neu machen ist overhead 🙂 Muss sehr schnell gehen, in deinem Fall sind 30% neumachen

06.05.2007 - 18:41 Uhr

Verflixt nochmal, mir fällt tatsächlich gerade kein Weg ein, möglichst schnell die Zahl -1 oder 1 zufällig zu generieren... ich hoffe jemand kann mir auf die Sprünge helfen (möglichst ohne if bedingungen usw)

05.05.2007 - 17:16 Uhr

Informativ aber äußerst nervig, gibts einen Workaround? Math Round geht leider nicht, dass führt zu Seiteneffekten

05.05.2007 - 16:58 Uhr

Ich hab hier einen seltsamen Ausdruck, den ich auswerten wollte.

Im Debugger komm ich an eine Stelle, an der folgendes abgefragt wird:


x + y > 1

Nun gucke ich im Debugger bei Überwachen mal nach x und y:


x+y>1.0	true	bool
x+y	1.0	float


Kann mir das einer erklären?
x ist 0.08 und y 0.92, beides Float, aber warum ist das größer 1.0 ? Es gibt keine weiteren Stellen, die ich sehen kann, also dürfte das doch nicht größer 1 sein? Dennoch ist es das.

Edit: Ich würd Math.Round gerne vermeiden

05.05.2007 - 14:24 Uhr

Danke 🙂 Ist ja nicht allzu aufwendig 🙂 Aber dennoch danke

05.05.2007 - 13:43 Uhr

Ich hab in einem Programm, wo ich mit PointF arbeite, dass Gefühl, dass float nicht genau genug ist und würde gerne auf mehr Stellen umsteigen, aber PointD gibts leider nicht und zwei doubles zu nehmen würde bedeuten, das ganze Programm umschreiben zu müssen. Gibts da ne Lösung?

04.05.2007 - 18:58 Uhr

Mein Prof meinte, dass klappt so nicht wirklich, Es müsste follter mit Determinanten berechnung gehen.

04.05.2007 - 08:23 Uhr

Hallo,
ich hab folgendes Problem: Ich muss zwei Gleichungen mit zwei Unbekannten für beliebige Werte ausrechnen. Doofes Beispiel:


float a = b*2;
float b = a+2;

Nur als Beispiel, also ich hoffe das Beispiel macht klar, was ich meine. Ich muss a ausrechnen bevor ich b kenne, was natürlich nicht geht. Aber gibt es denn einen weng sowas zu lösen?

28.04.2007 - 19:42 Uhr

Eigentlich wollte ich vermeiden, dort ein try und catch einzufügen, sondern irgendwie in der ersten Form, wo der fehler auftritt einen abbruch zu erzwingen und nicht die exception noch höher zu werfen

28.04.2007 - 19:37 Uhr

Application.Exit macht nichts, der Fehler kommt in dem Konstruktor der ersten Form und dort scheint mein App.Exit nichts zu bewirken, er wird zwar gerufen, aber danach kommt der Form_Onload usw und alles läuft weiter

28.04.2007 - 15:51 Uhr

Vergesse es jedesmal,
bei mir wird in Form Init eine Klasse geladen, wenn diese eine Exception wirft, soll dass Programm beendet werden, dass mach ich dann mit this.close();
nur wirft dass in Program.cs eine Exception hier:

 Application.Run(new Main());

Mit der ObjectDisposeException:
Auf das verworfene Objekt kann nicht zugegriffen werden.
Objektname: Main.
Macht auch sinn, befor Main da ist, wirds geschlossen, aber kann man irgendwie das Programm beenden? Oder muss ich das Application.Run noch extra in ein Try block schieben?

22.04.2007 - 17:22 Uhr

Autsch, das tut weh 🙂

Danke

22.04.2007 - 17:18 Uhr

Hm, wie komme ich dann an den Typen ran? Ist da ToString sinnvoll? und dann nicht mit is sondern == "NameSpace.Klasse" ?

22.04.2007 - 16:55 Uhr

Das habe ich auch getan, ist hier nur ein Beispiel

Ich hab mit console write line geguckt, was bei getType raus kommt --> namespace.klasse und das hab ich copy paste bei is namespace.klasse (ohne Strings) und der meint, dass dieser code nie erreicht wird

Edit hier der Code:



foreach (Cl c in objekte)
            {
                
                if (c.GetType() is Namespace.ClBox)
                {

ClBox erbt von Cl (funktioniert auch nicht, wenn ich namespace weglasse)

22.04.2007 - 16:48 Uhr

Ich glaub das Problem ist, dass C# das ganze anders rum durchackert, ich muss erst auf die alte position bewegen, dann skalieren, dann auf die 0,0 position bewegen. Hab ich vergessen, die matrix order

22.04.2007 - 16:33 Uhr

Kann dir nicht folgen, das objekt is polymorph, es ist vom Typ container, beinhaltet aber diverse klassentypen, die von container erben, heißt das, ich komme nicht an die expliziten definitionen ran?

22.04.2007 - 16:28 Uhr

Wenn ich objekt.getType() in der Konsole ausgebe steht da name.class , das stimmt auch so, wenn ich im Code jedoch


Console.WriteLine(objekt.getType());

if(objekt is name.class){

}


schreibe, kommt

Warnung	1	Der angegebene Ausdruck ist nie vom bereitgestellten ("name.class") Typ.

Verstehe ich da was falsch? Wie soll man denn sonst den is operator nutzen?

(name.class ist ein Beispiel)

22.04.2007 - 15:12 Uhr

Naja, wird nicht viel helfe, es fehlten Verwiese, weil die bei mir kreuz und quer gingen, ich ordne gerade, habe aber ein Problem, ich habe mehrdeutige verweise auf eine Klasse, die ich in den Namespace geholt habe, einmal
Space1.KlasseA und einmal Space2.KlasseA
Gibt es einen Weg, wie ich die Namespaces behalten kann, aber deutlich machen kann dass ich mit new KlasseA in wirklichkeit Space2.KlasseA meine ohne immer Space2.KlasseA = new Space.KlasseA machen zu müssen?

22.04.2007 - 14:57 Uhr

Entschuldige, das mit der Loaderexception habe ich überlesen, ich hab ein wenig verwurschteltes System mit Verweisen, es lag wohl daran. Werde es wohl ordnen müssen.

22.04.2007 - 14:49 Uhr

Ich lade eine DLL


Assembly ass = Assembly.LoadFile("DLL");

und versuche die Typen dieser Datei zu extrahieren, nur wirft mir leider


ass.getTypes();

eine TypeLoadException, mit der ich leider nichts anfangen kann.
LoadFile funktioniert soweit, in ass ist die DLL mit dem richtigen Namen drin und die Klasse in der DLL hat auch ein Interface implementiert, daher ist es mir ein Rätsel, warum bei mir die Exception geworfen wird.
Die Suche ergab auch nichts hilfreiches.

21.04.2007 - 17:44 Uhr

Ich hab eine Main form, dort rufe ich ganz simpel eine form auf:


Form2 f = new Form2();
f.Show();
f.Focus(); // Zur sicherheit

Dort gibt es ein Font Dialog und textfelder usw, wenn den font dialog dort öffne, etwas auswähle und auf ok klicke, schließt sich der Fontdialog, ich sehe kurz Form2 und dann springt auf einmal der Fokus auf das erste Fenster, obwohl nirgendswo code den Foucs wechselt, außer hier oben.

Kann man das unterbinden? Man darf durchaus fokus wechseln, aber das ist eher ein unkontrollierter Fokus verlust

Edit: Es funktioniert auch nicht, wenn ich nach dem schließen des Font fensters ein this.Focus() mache

21.04.2007 - 14:20 Uhr

Achso, dann verstehe ich jedoch nicht, warum konkrete Klassen von X die Methode Clone nicht haben, ich kann , wenn ich eine konrekte Klasse nutze, dort kein Clone aufrufen

21.04.2007 - 14:01 Uhr

Verstehe ich nicht, klasse implementiert: X: ICloneable
Dann lasse ich die Methode generieren:


#region ICloneable Member

        object ICloneable.Clone()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion

Setze dein ein Public vor und bekomme die Fehlermeldung:
Fehler 1 Der public-Modifizierer ist für dieses Element nicht gültig.

Das ist seltsam, denn es lief vorhin.

Bei protected kommt der selbe fehler, ergo ist die Methode private und wie soll ich diese Methode dann in unterklassen überschreiben?

21.04.2007 - 13:25 Uhr

Ich komme gerade ein wenig durcheinander.
Ich habe eine abstrakte Klasse X, diese soll eine Clone Methode haben, die nicht abstrakt ist, das bedeutet in der abstrakten Klasse X soll Clone einfach nur die Clone Methode von Object aufrufen, was auch immer dort zurückgegeben wird ist wurscht.
Nun sollen abgeleitete Klassen davon diese Methode überschreiben können, aber nicht müssen, (also Clone soll nicht selbst abstract sein)

Nun bekomme ich das irgendwie nicht wirklich hin, wie sieht die Clone Methode genau aus?


// Return X weil Klasse X
public X Clone(){

}

Das da oben will nicht so recht, da X eine abstrakte Klasse ist.
Ich kann da aber auch nicht abstract schreiben, weil man dann mit override eine Methode bekommt, die einem als Rückgabe eine Abstrakte Klasse liefet, obwohl man es in einer konkreten Klasse implementieren muss...

Ich will also eine Methode vererben, die überschrieben werden kann, aber nicht den selben Typen liefert. Es geht darum eine Methode Clone polymorph zu halten, die aber in den konkreten Klassen den richtigen Typ zurückgibt.
Oder ist dies nicht möglich und ich muss später (KonkreteXKlasse)KonkreteXKlasse.Clone() schreiben?

21.04.2007 - 12:19 Uhr

Ich hab ein kleines Problem mit der transformation von einem GraphicsPath.

Ich hab ein GraphicsPath, dass ein Rechteck beinhaltet, was beispielsweise in (200,170) anfängt und 30 breit als auch hoch ist.
Das wichtige hier ist die Tatsache, dass das Objekt nicht in 0,0 beginnt.

Nun würde ich gerne dieses Objekt doppelt so groß haben, aber skaliert um seinen oberen linken Punkt und nicht um 0,0 der Ebene selbst. Der code sieht so aus:


// G ist der GraphicsPath

Matrix mat = new Matrix();

// Hole den oberen linken Punkt
PointF upperTop = G.GetBounds().Location;

// Bewege es zu 0,0
mat.Translate(-upperTop.X, -upperTop.Y);

// Skaliere um zwei
mat.Scale(2,2);
// Resete Offset
mat.Translate(upperTop.X, upperTop.Y);
            
// Wende Transformation an        
G.Transform(mat);

Leider funktioniert es nicht, wie es soll, die Transformation findet vom 0,0 ausgehend statt, nicht von dem oberen linken Punkt des Rechtecks

20.04.2007 - 21:37 Uhr

Verstehe, vielen dank

20.04.2007 - 20:58 Uhr

Danke.

Noch eine frage, wenn ich mit Add KeyValue Pairs generiere, sind die Keys im Speicher geordnet?
Wenn ich die Keys ausgebe, sind diese dann nach der Reihenfolge, wie die geschrieben worden sind?

20.04.2007 - 20:06 Uhr

Ehm, spät, aber noch da.
Wenn ich die values eines Dictionarys durchsuche, kann ich irgendwie an den Key eines bestimmten Values kommen?

19.04.2007 - 20:52 Uhr

Oh, in der Tat half das Doublebuffern des Panels selbst, was mnich verwirrt hat, ist die Tatsache, dass der Parameter nicht da war, in der Property Liste, so wie bei der Form selbst.

Danke!

19.04.2007 - 20:14 Uhr

Ich kenne das Problem, dass wenn man zuviel auf der Form ebene mit OnPaint arbeitet, dass es dann flackert, weil der DoubleBuffer nicht aktiv ist -> ergo wird das Bild versucht darzustellen, obwohl es noch nicht fertig ist. Setzt man DoubleBuffer der Form auf true, verschwindet das Problem, da ja ein backbuffer genutzt wird um das Bild aufzubauen und dann an den front buffer zu senden.
Aber ich habe das Problem, dass ich in einem Panel onPaint arbeite und dort kommt es trotz DoubleBuffer zu dem störenden flackern, kann man dies irgendwie verhindern?

Ich wäre für jeden Tipp dankbar

19.04.2007 - 19:22 Uhr

Ich hol mir die ItemListe von einem ToolStrip mittels item und kriege auch eine Collection, die ich so verarzte:


foreach (ToolStripItem item in tS.Items)
            {
                if (item != s)
                {
                    // checked?
                }
            }

Aber wie kann ich den Zustand der TSButtons auf checked setzen? item.checked exisitert ja nicht, krieg ich den Item irgendwie in den TSButton und dort den checked zustand?

22.03.2007 - 19:29 Uhr

Alles klar.

Danke dir.

22.03.2007 - 19:20 Uhr

Ich habe diesen TestCode:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class TestRoot
    {

        protected String name;

        public TestRoot(String n)
        {
            this.name = n;
        }
    }

    class TestInh : TestRoot
    {

        public TestInh(String n)
            : base(n)
        {

        }

        public void tuwas(TestRoot tr)
        {
            System.Console.Out.WriteLine(tr.name);
        }
    }
}

Die abgeleitete Klasse hat die Methode tuwas, welche ein TestRoot bekommt, aber warum kann durch die Sichtbarkeit des Protected auf tr.name nicht zugegriffen werden? TestInh erbt doch von TestRoot und müsste doch tr.name kennen? Seine eigene Variable geht, ist klar, sonst wäre protected hin 🙂 Aber hier kommt ja die Qualifizierer Meldung, dass der Zugriff durch namespace.TestRoot oder namespace.TestInh sein muss, guck ich mir den Typ von tr und von this an, steht da aber namespace.TestRoot bzw namespace.TestInh, wo ist da das Problem?

28.02.2007 - 13:29 Uhr

Ich rede von der IDE, nicht von der Anwendung 🙂
Ich will Ansichten der Visual Studio IDE speichern können, das hat nichts mit programmieren zutun