Laden...
D
Daniel83 myCSharp.de - Member
Bielefeld Deutschland Dabei seit 05.02.2008 171 Beiträge
Benutzerbeschreibung

Forenbeiträge von Daniel83 Ingesamt 171 Beiträge

09.11.2015 - 15:11 Uhr

Hallo Janiix3,

im Zweifel könnte dein Problem dort liegen, wo du den Port auf machst, wartest du irgendwie auf empfangene Daten? Sorichtig nebenläufig ist die SerialPort Verarbeitung out of the Box dann nämlich auch nicht.

28.08.2015 - 07:41 Uhr

Hallo Frokuss,

Falsches Forum, aber wie gebunden bist du an WinForms? Evtl. schaust du dir mal die Varianten an, die WPF so mit bringt, das ist dort (wie ich finde) deutlich komfortabler und handhabbarer gelöst. Reichen ja erstmal drei Bilder oder so, die du über ein ander legst un ein bisschen an der Transparenz rum schraubst.

Gruß Daniel

20.08.2015 - 15:36 Uhr

Hallo,

wir arbeiten gerne mal mit Embedded Hardware und "lansamen" aber zeitkritischen Übertragungen, die war in C# visualisieren oder dort einstellungen treffen.
Im Embedded Bereich hat man gerne mal nur wenige kByte Ram. Um dort "aufwändige" Datenstrukturen halten zu können muss man schon mal Bits schubsen und wenn ich einen Rechner habe, der das rückwärts im schlaf kann, dann mache ich das Bit Schubsen natürlich auf dem PC und nicht auf dem embedded Controler.
Das gibt es damit also durchaus auch in der Praxis aber der regelfall wird das wohl eher nicht sein.

13.08.2015 - 16:50 Uhr

Hallo trib,


MainForm.BringToFront();

nachdem dein Splashscreen durchgelaufen ist. Beachte bei Bedarf invoke

18.06.2015 - 08:59 Uhr

Hallo Jacyrio,

ich hab dafür eine Lösung, bin mir nicht sicher, dass es der Weisheit letzter Schluss ist, aber Funktioniert und ich finde auch nicht ganz schlecht.
Ich habe ein DLL Projekt angelegt, dort u.a. eine Form drin.

Ich verwende eine Statische Klasse als interface nach außen, dass passt in meinem Fall am besten, dieser gehört auch das Window. An irgendeiner Stelle muss das ja erzeugt werden. Dann kann ich das ViewModel an an das Window binden und mache den rest des Zugriffs wieder nur darüber.

Gruß Daniel83

08.05.2015 - 14:52 Uhr

Hallo Baumunk77,

hast du die DLL gelinkt? Sieht sonst eigentlich ganz OK aus.

Gruß
Daniel

02.09.2011 - 07:55 Uhr

Man erhält eine mindest Qualität der Software

Wobei diese leider auch teilweise extrem niedrig ist - und man hört ja immer wieder von Fällen, in denen exakte, nicht legitime Kopien anderer Apps durch dritte Parteien eingestellt und akzeptiert wurden.

Das spricht ja nicht für schlechten Code, sondern nur für schlechtes Geschäftsgebaren. Mit mindest Qualität meinte ich eigentlich, dass mein Gerät nicht zerstört wird.

01.09.2011 - 09:24 Uhr

Na, damit du nicht deinen eigenen Vertriebskanal generierst.

Grundsätzlich finde ich das Konzept gar nicht schlecht. Man erhält eine mindest Qualität der Software, dafür muss jeder Entwickler die Infrastruktur bezahlen. Bei Apple gibts noch ne Entwicklungsumgebung dazu, für Lau. Wie MS das handhabt weis ich gerade nicht.

Prinzipiell ne gute Idee, nur eben leider nicht für "Bastler" die mal was für sich schreiben wollen.

04.07.2011 - 10:26 Uhr

Danke für die Hilfe.

Unser Lieferant hat die Treibersoftware umgestellt. Mit einem älteren Treiber bin ich unter der 32 Bit Version klar gekommen. Für 64 Bit habe ich aktuell keine Treiber, da muss ich mich drum kümmern.

Portmon ist leider unter Win7 wohl nicht lauffähig und wird anscheinend von Microsoft seit 2006 nicht mehr weiterentwickelt.

Gruß Daniel

04.07.2011 - 07:14 Uhr

Ich habe ein anderes Programm, welches auf diese Hardware zugreift. Dieses ist in C++ geschrieben und läuft ohne Probleme, ich weiß jedoch nicht, ob dieser den SerialPort mehrfach oder nur einmal Öffnet.

Dem Treiber werde ich mich nochmal annehmen. bzw. mal eine andere Hardware Testen.

30.06.2011 - 15:22 Uhr

Ich möchte euch noch ein wenig Code zur Verfügung stellen. Ich habe die Funktion ein wenig gekürzt, aber hoffentlich alles relevate Dringelassen.

private bool SendeEinenEingang(  )
        {
            DateTime aktuell = new DateTime();
            TimeSpan timeOut = new TimeSpan(3500000);//=>350ms

            //Erstellen einer neuen SerialPort Instanz
            SerialPort port = ErstellePort( portname );

           

            if ( port != null )
            {
                //Lese Eingang aus
                int eingang = /*hier wird die Anzahl ermittelt*/;

                //Erzeugen der fortlaufenden Nummer für den Eingang, real 1-10, 19-28
                if ( eingang > 10 )
                {
                    eingang = eingang - 8;
                }

                //Erzeugen eines schreibe Puffers, fülle mit Daten
                byte[] ausgangsPuffer = new byte[ 6 ];
                ausgangsPuffer[ 0 ] = busAdresse;
                ausgangsPuffer[ 1 ] = Convert.ToByte( eingang - 1 );
                ausgangsPuffer[ 2 ] =/*weitere Daten*/;

                /* Noch mehr Daten*/
                for(...)
                {
                    try
                    {
                        //Öffnen des SerialPorts
                        port.Open();

                        string[] ports = System.IO.Ports.SerialPort.GetPortNames();
                        bool vorhanden = false;
                        for (int i = 0; i < ports.Length; i++)
                        {
                            if (ports[i] == portname)
                                vorhanden = true;
                        }
                        if (!vorhanden)
                        {
                            return false;
                        }

                        if (port.IsOpen)
                        {
                            //Senden des Protokolls
                            port.Write(ausgangsPuffer, 0, ausgangsPuffer.Length);

                            int zaehler = 0;

                            //Hohle aktuelle Systemzeit für Timeout
                            aktuell = DateTime.Now;

                            //Warte auf genug Daten oder Timeout
                            while (!(port.BytesToRead >= bytesToRead)
                                        && ((aktuell + timeOut) > DateTime.Now))
                            { zaehler++; }

                            //Es liegen genug Daten im SerialPort Puffer
                            if ((port.BytesToRead == bytesToRead)
                                   || (port.BytesToRead > 12))
                            {
                                //Erstellen eines Eingangspuffers
                                byte[] eingangsPuffer = new byte[bytesToRead];

                                //Einlesen der empfangenen Daten
                                port.Read(eingangsPuffer, 0, eingangsPuffer.Length);

                                //Schließen des SerialPorts
                                port.Close();

                                //Festlegen ob ein Offset nötig ist, wenn ja wie groß
                                int offset = 0;
                                if (eingangsPuffer[0] != 0xBD)
                                    offset = 6;

                                //Prüfen ob die Antwort gültig ist, sost Enden
                                if (!IstKorrekteAntwort(eingangsPuffer,
                                                                ausgangsPuffer, offset))
                                {
                                    //Schließe SerialPort
                                    port.Close();
                                    //Schließe Progress Formular, aktiviere MainForm
                                    fortschrittsUebertragungsForm.Schließen(false, ref hauptForm);
                                    //Öffne Fehlermeldung
                                    ErrorMessage fehlerForm = new ErrorMessage();
                                    fehlerForm.ZeigeFehlerDialog("Fehler",
                                        "Bei der Übertragung kam es zu Komplikationen",
                                        "es wurde nicht geantwortet", true);

                                    return false;
                                }
                            }

                            else
                            {
                                //Schließe SerialPort
                                port.Close();
                                //Schließe Progress Formular, aktiviere MainForm
                                fortschrittsUebertragungsForm.Schließen(false, ref hauptForm);
                                //Öffne Fehlermeldung
                                ErrorMessage fehlerForm = new ErrorMessage();
                                fehlerForm.ZeigeFehlerDialog("Fehler",
                                    "Bei der Übertragung kam es zu Komplikationen",
                                     "es wurde nicht geantwortet", true);

                                return false;
                            }
                        
                            //Zeige den Fortschritt an
                            fortschrittsUebertragungsForm.NaechsterSchritt
                                (/*Fortschritts Handling*/);
                        }
                        else   //if ( port.IsOpen )
                        {
                            istErfolgreich = false;
                        }
                    }
                    catch (Exception e)
                    {
                        if (e is System.UnauthorizedAccessException || e is System.InvalidOperationException || e is System.IO.IOException)
                        {
                            if (e is System.InvalidOperationException)
                            {
                                //Schließe SerialPort
                                port.Close();
                            }
                            //Schließe Progress Formular, aktiviere MainForm
                            fortschrittsUebertragungsForm.Schließen(false, ref hauptForm);
                            //Öffne Fehlermeldung
                            ErrorMessage fehlerForm = new ErrorMessage();
                            fehlerForm.ZeigeFehlerDialog("Fehler",
                                "Bei der Übertragung kam es zu Komplikationen",
                                "Die USB Verbindung wurde unterbrochen. bitte überprüfen sie "
                                + "den Anschluss der Schnittstelle", true);

                            return false;
                        }
                    }    
                   
                } //for ( ...)
                port.Dispose();
                return true;
            }   //if ( port != null )
            else
            {
                return false;
            }
        }
30.06.2011 - 13:34 Uhr

Hallo Allerseits,

ich habe ein Problem mit einem meiner Programme beim ausführen unter Win7 (32 und 64 Bit).
Unter Win XP tut es was es soll.

Das Problem hängt mit einem von mir verwendeten SerialPort zusammen. Hardware technisch verwende ich einen USB Converter.
Aus verschiedenen Stellen des Programms greife ich nach ein ander auf dieses Gerät zu. Deshalb öffne ich die Verbindung, mache meine Übertragungen und schließe es wieder.

Nun die Fehlerbeschreibung: Wenn ich das erste mal eine Verbindung herstelle, d.h. USB eingesteckt, Serialport geöffnet, senden, empfangen, schließen, Funktion Ende, funktioniert das ganze tadellos. Aber bereits beim nächsten Verwenden wird nichts mehr empfangen. Senden funktioniert weiterhin. Mit einem anderen Rechner lese ich die Daten auf dem Bus mit, es findet eigentlich eine saubere Kommunikation statt. Aber wie gesagt, es wird nichts empfangen.

Getestet habe ich zusätzlich mit einem anderen .Net bassierten Programm, welches zum Mitschreiben der Busaktivität dient. Hier ist das Verhalten identisch. Wird die Verbindung geschlossen, und wieder geöffnet, wird nicht Empfangen.

Durch entfernen des USB-Steckers und wieder hineinstecken kann das Problem gelöst werden, bis das nächste mal der Serialport geschlossen wird.

Was ich bisher versucht habe, ist dass ich mich nicht wie vorher darauf verlassen habe, dass die Instanz der Serialportklasse am ende der Funktion zerstört wird, sondern ich habe sie "von Hand'" Disposed. Dies hat leider nichts gebracht.

Gibt es hier bekannte Schwierigkeiten? Muss ich noch mehr "von Hand" aufräumen? Oder vermutet ihr ein Treiber Problem?

Die Treiber Problematik möchte ich eigentlich ausschließen, da ein C++ Programm ohne Probleme mit diesem Gerät arbeitet.

Gruß Daniel

edit: Es werden keine Exceptions geworfen. Da ich auf eine Antwort warte, erkennt das Programm selbst, dass nicht geantwortet wurde. Ich habe außerdem ein kleines tool geschrieben, um das Event verhalten zu Testen, dieses Verhält sich gleich.

08.01.2011 - 13:24 Uhr

@ herbivore: unterschiedlich, von 80x80 px bis 600x 300 px
@ winSharper93: ich sitze gerade daran alle bilder aus der momentane anwendung heraus zu schneiden, diese kann ich dann einfach aus und ein blenden und spare mir die transparenz weil die Hintergrundfarbe schon drin ist.

07.01.2011 - 16:34 Uhr

VS 2005 Pro

Als release ohne VS und von der Festplatte dauert die besagte Aktion ca 1,1 sekunden.

07.01.2011 - 16:25 Uhr

Hallo Zusammen,

ich arbeite gerade mal wieder an Visualisierungen, wie das dabei so ist kommt man um die ein odere andere Grafik nicht herum. Daraus ergeben sich aber ein paar Probleme.
Ich habe beispielsweise eine Form, mit einem Hintergrundbild (max 94,3kB .png) zwei Bildern (56,9kB .png) und 12 Bildern (47kB .png).
eingebettet habe ich diese im Designer von VS in dem ich eine lokale Resource hinzufüge und dann auf Importieren klicke.
Die Bilder werden nicht immer angezeigt, sondern manchmal setze ich die Visible Eigenschaft auf true oder eben false.
Das ausblenden von 7 Bildern und das einblenden von einem Bild dauert geschlagene 1,5 Sekunden. Bei einem Pentium M 1,73 GHz 1GB Ram gestartet aus VS uim Debug Mode. Das finde ich sehr lang.

Kann mir jemand bitte einen Denkanstoss geben, wonach ich suchen kann?

Danke Daniel

Edit: ich arbeite mit transparenten hintergründen, ist da vieleicht der Pfefferbegraben?

14.12.2009 - 13:24 Uhr

Bau eine Funktion zu Speichern, die du über ein Menü oder sonst wie aufrufst. darin öffnest du den Dialog mit ShowDialog. Wenn du dann das Dialogergebnis auswertest ist doch an der stelle der Dialog schon geschlossen. Wenn du jetzt auf das Ok reagierst und deine Form öffnest, ist der Dialog schon geschlossen.
Entweder ist das kein Problem das so zu machen, oder ich habe das Verhalten bei mir immer falsch Beobachtet.

14.12.2009 - 12:25 Uhr

Ist nicht mein Gebiet, aber kannst du nicht normal einfügen, und dann in TextChanged oder so die Text eigenschaft also den Wert der RTF Eigenschaft zuordnen, du willst doch dass sämtliche formatierung verschwindet oder nicht?

14.12.2009 - 08:11 Uhr

Also ich denke nicht, dass es heute mehr Gewalt gibt als früher, sondern nur der Teil schwerer Gewalt ist deutlich gestiegen. Früher hatten selbst Strassenschläger noch respekt vor ein ander. Hat einer "aufgegeben" oder kam nicht mehr vom Boden hoch, dann wurde aufgehört. Heute fängt man dann erst richtig an.
Das den Jugendlichen die Koinsequenzen ihres Handelns nicht bewusst sind, kann ich nicht bestätigen. Ich fahre mit öffentlichen verkehrsmitteln zur Arbeit und fahre dabei an einem "sozialen Brennpunkt" oder zumindest an der dazu gehörigen schule vorbei. Dort sind immer wieder Kinder in der Bahn, die sehr klar haben, dass sie mit 14 kürzertretten müssen, weil ab dann nicht mehr der Polizist sagt "Du du du..." und es nihct mit einem erhobenen Zeigefinger getan ist. Ob diese Jugendlichen dann den absprung aus der Gewalt schaffen ist fraglich, aber sie nehmen es sich zumindest vor. Ich denke aber auch, dass die Jugendstrafen dann keine ausreichende Abschreckung darstellen.

07.12.2009 - 09:00 Uhr

Hallo iced-t89

Danke, Daruaf bin ich auch gekommen, damit bekomme ich einen uralt, also Windows 3.11 Style oder so ähnlich. Im größten Notfall lebe ich damit auch. Was ich gerne hätte wäre der "klasische Style" den ich bei Windows XP auswählen kann. Den müsste es zumindest bei Vista auch noch geben.

Wobei Eigentlich ist das fast nur interesannt bei einer Progressbar die ich habe, den Rest der Anwendung muss ich nur ein wenig größer machen.
Diese macht nämlich aus dem Schönen blauen kontinuierlichen Progress einen ziehmlich hässlichen grünen Block Progress und gerade weil ich in der Progressbar selbst den Fortschritt anzeige ist das nicht sehr schön.

Wobei, wenn es nicht was ganz einfaches gibt, dann shcreib ich den Fortschritt einfach drunter und zieh alle Forms was größer und dann hat sich die Sache.

Edit: Das mit dem Umstellen geht so: Application.VisualStyleState = System.Windows.Forms.VisualStyles.VisualStyleState.NoneEnabled;

07.12.2009 - 08:39 Uhr

Hallo zusammen,

Ich habe eine Anwendung, die so aussieht, wie ich es gerne hätte. Nun habe ich mal den Windowstheme verstellt (gut da hätte man auch früher drauf kommen können) und jetzt passt natürlich ne Menge nicht mehr. Muss ich also vor dem Start den verwendeten Style von Windows auslesen und entsprechend darauf reagieren, oder gibt es die Möglichkeit dem Nutzer die Klasischen Style "aufzuzwingen" zumindest für meine Anwendung?

In diesem Beitrag ging es Quasi um das gleiche nu4r anders herum.
Rainbird verlinkt dort einen Artikel aus der MSDN. um in alte Anwendungen neue Styles einzubinden. Ich nutze .Net 2.0 und will genau das verhindern.

Geht sowas? Und wenn ja, hättet ihr nen schlauen Suchbegriff für mich?

Gruß Daniel

25.11.2009 - 13:46 Uhr

Hallo Doltsche,

Du nimmst deine zwei Zeiten, und prüfst in dem du dir für einen Slot jeweis die Start und endzeitpunkte als Datetime für den gewünschten Tag anlegst, ob deine beieden Zeiten jeweils größes als die untergrenze, bzw. kleiner als die Obergrenze sind.
Ist das der Falls, dann rechnest du zeit2-zeit1 und hast ein TimeSpan.
Ist sagen wir Zeit2 größer, also geht über einen Slot hinweg, dann nimmst du Maxzeit-zeit1
Ist Zeit1 Kleiner nimmst du Zeit2-Minzeit.

Über zwei Tage hinweg kommt noch ein bischen was hinzu.

19.11.2009 - 11:06 Uhr

Hallo herbivore
Ich meine bei meinem letzten einkauf über mycsharp auf die seite gegangen zu sein und mir bücher angesehen zu haben, als ich von zu hause direkt auf Terashop gegangen bin waren sie m.E. deutlich teurer, ich kann mich aber auch geirrt haben

19.11.2009 - 10:07 Uhr

Hallo Luka22

ich habe sowohl Visual C# 2005 - Schritt für Schritt also den Vorgänger als auch talas Empfelung Windows Forms-Programmierung mit Visual C# 2005.
Habe sie bisher nur überflogen und sie machen beide einen gescheiten Eindruck.

Wenn dir egal ist, dass sie VS 2005 sind, gibt es die für mycsharp nutzer günstiger im Terashop hier unter dem Menü.

edit: oder gibt es das Angebot nicht mehr, hab es gerade nicht finden können

17.11.2009 - 15:59 Uhr

Guten Tag,

also ich für meinen Teil zocke gerne mal abends oder am WE, Dies liegt daran, dass ich einfach immer über irgendwas nachdenen muss. Ein zur Ruhe kommen und mal nichts im Kopf haben gibt es bei mir nicht. Wenn ich z.B. nen gemütlichen Fernseh abend mache, dann kommen fast immer irgendwelche spekulationen warum die Story nicht realistisch ist o.ä. Ist die Sendung also nicht sehr gut und das ist heute leider selten der Fall, dann schleppe ich die Gedanken darüber ewig manchmal bis spät in die Nacht mit mir rum. Deshalb ist ein Computerspiel oder sowas, was mein Gehirn beschäftigt für mich absolut entspannend, weil es einfach den Kopf frei hält.
Habe ich mal ausversehen nichts zu tun, oder mal keine Lust auf nihcts, werde ich schnell agressiv gelangweilt, das ist der Zustand in dem alles und jeder dafür verantwortlich ist, dass mir langweilig ist und dieser Zustand ist nicht erstrebenswert.
Ein Asuflug oder so ist natürlich auch eine feine Angelegenheit aber meist aus Zeit oder aber Geld mangel (almer Student) nihct drin.

Was das feiern angeht habe ich die Zeiten hinter mir, seit ich 2 Jahre für eine Firma gearbeitet habe, die spezial Events für Diskotheken entwickelt und vertriben hat. Dort habe ich genug laute Musik und schlechte Disco Luft für die nächsten paar Jahre bekommen.

Saufen war noch nie so meins, das tut immer so weh den nächsten Morgen.

12.11.2009 - 07:49 Uhr

der blaue Pfeil - genau genommen der weiße Pfeil auf blauem Grund, aber lassen wird das 😃 - also der blau Pfeil nach unten vor dem Titel des Threads in der Themenübersicht oder in den Suchergebnissen springt zum ersten ungelesenen Beitrag.

Ok, das mit dem gelben Pfeil habe ich nicht gewusst und auch nicht wahrgenommen.
Das verhalten der blauen Pfeils vor dem dem Threadtitel kann ich bestätigen, aber den oben beschriebenen blauen Pfeil in der Übersicht sehe ich nicht.
Ich habe an den Einstellungen des Forums nihcts geändert und nutze IE 7.

Dann gibts das Feature ja schon, super wie schnell das hier immer geht^^

Danke für die Erklährung

edit: Jetzt gehts, sehr merkwürdig. Vieleicht leigts an der bomben Internetleitung bei uns im Büro oder so...

12.11.2009 - 07:42 Uhr

MSP430 haben wir im Einsatz

11.11.2009 - 15:28 Uhr

Würde ich es über Timeout der Serialportklasse machen dann müsste ich ja mit der TimeoutException arbeiten. Da dies aber ein, naja, halbwegs erwarteter Zustand ist möchte ich das Programm nicht gegen die Wand fahren um es nachher wieder glat zu ziehen sondern umgehe die Ausnahme leiber, so sollte man das doch meines Wissens nach tun.

11.11.2009 - 15:14 Uhr

Verdammte Axt, Augen auf beim Forumsbesuch sag ich nur...
Ok, danke und Erledigt.

Aber das es das gibt zeigt, dass das Feature toll ist.

edit: Nochmal nachgesehen, das ist nicht das Feature, was ich suche, der Blaue Pfeil geht zum Ende der Seite, nicht zum letzten nicht gelesenen Beitrag.

Nehmen wir an, du hast nach 3 Wochen mal wieder Lust auf ein parr Javaprogramierer Witze. DA wurde inzwischen 25 neue Beiträge geschrieben. Du müsstest dir also merken, dass du das letzte mal bis mitte Seite 5 gekommen bist. Jetzt ist ende Seite 6 Erreicht.
Wählst du den Thread an, so landest du auf Seite 1 oben. Mit dem Blauenpfeil kommst du auf Seite 6 unten. Ich hingegen möchte zu Seite 5 Mitte, weil ich da weiter lesen muss.

11.11.2009 - 13:55 Uhr

Hallo Zusammen,

da ich wegen eines Projektes auch öffter auf Mikrocontroller.net unterwegs bin, ist mir dort etwas aufgefallen.
Wenn ich dort ein Thema nochmals besuche, dann werde ich automatisch zu dem ersten Artikel geschickt, der erstellt wurde, nachdem ich das letzte mal das Thema besucht habe.
Ich lese also als erstens den letzten ungelesenen Beitrag.
Die Nötigen Tags werden hier glaub ich auch gespeichert, da ich irgendwo mal ein Link auf einen Folgebeitrag gesehen habe.
Ich persönlich finde das sehr nett und gerade bei relativlangen artikel äußerst praktisch.
Vielleicht investiert ihr mal einen Gedanke, ob das für dieses Forum evtl. auch erstrebenswert wäre.

Ich finde nicht, dass man wegen 2 gesparten Klicks das ganze Forensystem ümwerfen sollte, aber wenn dieses das Verhalten hergibt finde ich es ein nettes Feature. Aber möglicherweise spricht eine andere Überlegung dagegen.

Grüße Daniel

11.11.2009 - 13:10 Uhr

Habe ich mir schon fast gedacht, als bei Timespan von Ticks die rede war.
Danke dir für das Posting, hat mir zumindest das Brett vorm Kopf weg gerissen.
Auch wenn deins genau so funktioniert wie meine Lösung, bleibe ich bei meiner.
Das sieht mehr nach Zeitmessung aus 😉

11.11.2009 - 12:58 Uhr

Also ich lasse mir von mienem Gerät eine Antwort schicken. Beide Systeme prüfen eine Checksumme und die PC Software prüft ob die Antwort die ist, die zu erwarten ist. Das Senden läuft in einem extra Thread und über die Timespan geschichte jetzt auch so wie sie soll.

Meine jetztige Lösung:


            System.DateTime Aktuell = new DateTime();
            System.TimeSpan TimeOut = new TimeSpan( 5000000 );


            Aktuell = DateTime.Now;
            while ( !( port.BytesToRead == BytesToRead ) && ((Aktuell+TimeOut)>DateTime.Now) )
             { counter++; }

11.11.2009 - 12:33 Uhr

Danke für die Idee, ist ja im Prinzip nichts anderes als meine Zählschleife, ich würde aber gerne weg von der geschwindigkeit der CPU.
Wenn ich z.B. festlege, dass ich maximal 250ms auf eine Antwort warten möchte und das mit meinem 3,4Ghz Rechner herausfinde, das dies 5Mio Ticks sind, dann geht das doch auf einem 1 Ghz Rechner nicht mehr auf, der wartet dann länger, aber schlimmer wenn einer mit einem 7Ghz Rechner kommt, dann wartet der nur 125ms. Die anderen Komponenten werden aber nicht schneller, somit gehen ihm Informationen verloren. Oder habe ich gerade das Konzept deiner Lösung nicht verstanden?

edit: Datetime.now + Timespan könnte eine Lösung sein

11.11.2009 - 12:08 Uhr

Das einzige was ich brauche ist ein zweites Abbruchkriterium als ich habe bekommen was ich brauche.
Die Zählschleife und der Timer laufen nicht in der Gleichen Funktion, ich habe die natürlich getauscht un es zu Probieren.
Mit der Zähler Variante läuft mein System hier auf ca 30% mit zwei Offnen Entwicklungsumgebungen und reagiert genau so "schnell" wie wenn ich das Programm nicht ausführe.

11.11.2009 - 12:02 Uhr

Was ich eigentlcih mache:

Ich habe ein Gerät auf das ich Einstellungen von einem PC übertrage.
Das mache ich mit mehreren Protokollen, da die definierte Protokollgröße es nicht anders zu lässt.
An dem Bus den ich benutze hängt noch ein zweites Gerät, welches mir meine Protokolle sowie die Antworten darauf mit einem Fehler Quitiert. Deshalb 2 Teilnehmer, die antworten. Dieses Problem habe ich aber soweit im Griff.
Warum ich auf "Keine Antwort" reagieren muss ist einfach. Wenn der fall eintritt, dass jemand wärend der Komunikation über das Kabel Stolpert und/oder es Rauszieht, kann es sein, dass die übertragung unter-/abgebrochen wird. Würde ich hier jetzt warten wäre das nicht im Sinne des Erfinders, da sich ja einfach nichts mehr tut.

11.11.2009 - 11:58 Uhr

Ja, einen Evnthandler habe ich regestriert.
Den Timer mit Enabled true und false zu benutzen habe ich schon immer so gemacht, auch wenn es vieleicht falsch ist, hat es bisher immer geklappt.

Im Event setzte ich lediglich Timeout auf true

11.11.2009 - 11:18 Uhr

Hallo Zusammen,

Ich habe ein Programm, welches via COm-Port mit einem Microcontroler kommuniziert. Das klappt auch alles wunderbar. Mein Problem ist nur, dass ich auch auf "keine Antwort" reagieren muss. Im Moment löse ich das über eine Zählschleife, das funktioniert auch.

//Warte bis genug Daten am SerialPort anliegen oder ein Timeout auftritt
                while ( port.BytesToRead < bufferSize && count < 100000 )
                {
                    count++;
                }

Aber hat zwei Nachteile, erstens ich denke nicht, dass das besonders schön ist. Zweitens wenn ich das Programm auf einen anderen Rechner mit mehr oder weniger Rechenleistung bringe, dann habe ich möglicherweise zu kurze Wartezeiten, d.h. das was ich in einer bestimmten Zeit erwarte kommt nicht, weil sich die Zeitspanne der bestimmten Zeit verkürzt.

Ich habe als überlegt und bin auf sowas gekommen:

Timeout = false;
                        TimeoutTimer.Enabled = true;
                        while ( !( port.BytesToRead == BytesToRead ) && !Timeout )//1000
                        { counter++; }
                        TimeoutTimer.Enabled = false;

Timeout wird im Event von Timertick auf true gesetzt.

Dummerweise geht das nicht, weil der timer merkwürdigerweise nicht ttickt. Außerdem denke ich auch nicht, dass diese Lösung deutlcih hübscher ist.

Die dritte Lösung, die mir eingefallen ist wäre einfach zu warten.

Threadsleep würde aber immer auftreten, da ich viele Datensätze verschieben muss, wäre eine feste Wartezeit nicht soo toll, da das ganze schon bei sauberer Verbindung relativ lange dauert und ich das nicht zusätzlich verlängern möchte.

Hat von euch vieleicht eine Idee, wie ich das anders angehen kann?

Über das Data resieve Event möchte ich es nichtmmachen, da teilweise antworten von unterschiedlichen Teilnehmern kommen, dsa Event nicht wirklich ganz zuverlässig funktioniert, und ich letzt endlich da dann das selbe Problem habe.

Danke schon mal Daniel

08.10.2009 - 12:07 Uhr

Also die Herr der Ringe verfilmung fand ich sehr gut, auch im vgl. zum Deutschen Buch.

Welcher Film definitiv besser war als das Buch:
*trommelwirbel* Oh Wunder Oh Wunder, Stirb langsam 3, ja es gibt dazu ein Buch, aber wohl erst nach dem Film, es geht also auch anders herum, Film (war nicht mein Geschmak) aber Buch war klar für die Tonne oder den Kamin, bei der Art des Films aber auch kein Wunder.

07.10.2009 - 14:59 Uhr

Also bei mir tritt das Problem auch von Zeit zu Zeit mal auf.

Gruß Daniel

06.10.2009 - 12:56 Uhr

Hallo Zusammen,

Da ich nun eines meiner Programme mit einem MSP430 "paaren" muss, bin ich auf der suche nach einem Gescheiten Morcocontroler-Forum, www.mikrocontroller.net ist mir dabei an dauert über den Weg gelaufen, die Antworten sind auch glaub ich sehr viel versprechend, nur die Organisisation (Suche usw.) lässt m.E. sehr zu Wünschen übrig.
Vieleicht beschäftigt sich ja von euch zufällig jemand uahc mit dem Thema und kann mir da den ein oder anderen Tip (link) geben.

Besten Dank schonmal

Daniel

02.10.2009 - 10:20 Uhr

Hallo carmani,

schau dir Das mal an.
Du verwendest bestimmt DataReceived Event? Dieses Event ist nicht sehr zuverlässig, wenn du z.B. Protokolle sendest, die länger als 1 Byte sind, kann es sein, dass du einmal 2 und dann nochmal 2 empfängst, je nach dem wie du auswertet, kann es sein, dass du so nicht in die Auswertung kommst, arbeite lieber mit abbruch bedingungen und lese solange bis diese Erfüllt sind.

Gruß Daniel

02.10.2009 - 10:06 Uhr

Ok, frage hat sich erledigt.

Wie schon fast vermutet leigt das Problem nicht in dem Aufruf des Invoke, sondern im Code, der danach abgearbeitet wird. Offensichtlich springt VS aber nach dem Verlassen des Threads aber nicht in die eigentliche Funktion um den Fehler kund zu tun, sondern meckert an der Stelle wo der Thread verlassen wird. Man muss also händisch gucken wo man überall was macht und dort durchsteppen, warum einfach wenns auch kopliziert geht.
Schade ist nur, dass man so, wenn man das verhalten nicht kennt ewig an der falschen Stelle sucht.

02.10.2009 - 08:55 Uhr

Hallo Metalchild,

der Code ist soweit Ok, machst ja auch nichts dolles, nur senden und empfangen.
Wenn du Empfangen kannst, woher kommen da die Daten, du forderst ja nichts an, werden die immer gesendet, oder machst du das händisch? Evtl. Empfängt dein Drucker nichts weil er gerade sendet.
Kann dein Drucker mit Strings umgehen, hast du mal Byte[] oder so versucht zu senden, wenn du Steuercodes senden willst, sind das ja nicht zwingend strings.

Gruß Daniel

02.10.2009 - 08:39 Uhr

Guten Morgen zusammen,

ich habe in diesem Code ein Problem

public delegate void AktualisiereZusammenstellungDelegate(List<SuperObjekt> Zusammenstellung);
        public void AktualisiereZusammenstellung(List<SuperObjekt> Zusammenstellung)
        {
            if (InvokeRequired)
            {
                Invoke(new AktualisiereZusammenstellungDelegate(AktualisiereZusammenstellung), Zusammenstellung);
            }
            else
            {
                //GUI Aktion
            }
        }

im Invoke aufruf bekomme ich eine IndexOutOfRange Exception, muss ich die dann in dem Teil der Funktion suchen, die per invoke Aufgerufen wird? also hinter else, bzw. das wo ich dann hin springe? Das Problem taucht nur manchmal auf, aber die Liste bleibt die selbe.

Wie ich eine IndexOutOfRange Exception behandeln muss ist mir klar, nur nicht wo ich suchen muss, wenn der Fehler an dem Invoke aufruf kommt, da macht das Programm mit der Liste doch gar nichts.

30.09.2009 - 13:48 Uhr

Vielen Dank für den Tip, da hätte ich mir nen Wolf von hand gesucht

30.09.2009 - 13:03 Uhr

Hallo zusammen

Ich benutze VS2005 Prof.
Gibt es hier eine Möglichkeit, Dateien auf Unterschiede zu überprüfen, Hintergrund ist der ich habe eine Original Version eines Projekts und eine Kopie, es sollte sich dabei eigentlich um das selbe Projekt mit einer geänderten Eigenschaft handeln, leider ist dem nicht so. Da das händische Vergleichen ein wenig umständlich ist würde ich gerne auf Unterschiede aufmerksam gemacht werden, gibt es eine solche möglichkeit?

mfg

Daniel

edit: Rechtschreibung

29.09.2009 - 11:24 Uhr

Wenn du den stift aufsetzt und zum schreiben bewegst, bewegst du in doch maximal um ein Pixel in X und um ein Pixel in Y Richtung.
Warum zeichnest du nicht OnMouseMove wenn MouseDown, jeweils diese Bewegung, du musst dazu nur die alte Position, also die vor der Bewegung speichern, diese mit der neuen Vergleichen, sind sie in X oder Y Richtung weiter als 1 entfernt zeichnest du nicht (diesen Vergleich kannst du dir aber eigntlich sparen wenn du MouseDown und MouseUp prüfst)
und dann zeichnest du eine Linie von einem Pixel zum neben an liegenden Pixel.

Dann hast du auch immer das auf deinem Display, was geschrieben wurde und nicht erst wenn du absetzt, wenn ich gerade richtig überflogen habe.

08.09.2009 - 15:05 Uhr
string=string.Substring(0,(string.IndexOf('.')+1));

+1, oder +2 aber wenn es so statisch geht das auch.

Was du willst ist doch eine Nachkommastelle oder sehe ich das falsch? Ich meine mit substring geht beides^^

08.09.2009 - 14:15 Uhr

Passiert das nicht auch wenn ich

lbl_Status.Invalidate();

aufrufe? Auch diese Variante habe ich versucht, auch in der Reihenfolge, dass ich erst das Label beschreibe, danach Invalidate aufrufe und dann die Progressbar inkrementiere, hat aber auch nicht geholfen.

08.09.2009 - 12:13 Uhr

Richtig, ich muss ja sogar so machen. Ich habe nur vorher das versenden auch im GUI Thread gemacht, dass ich die Oberfläche nicht gearbeiten konnte kommt mir eigentlich sogar entgegen, dass muss ich jetzt anders Lösen oder doch zu lassen mal sehen, deshalb ergab sich das Problem nihct, habs jetzt nur mit hingeschrieben, damit wenn das nochmal jemand sucht, derjenige gleich nen paar Begriffe an die Hand bekommt.

08.09.2009 - 11:57 Uhr

Ok, lag tatsächlich am Blockieren, nur komisch, dass sich dann bei der Progressbar was geregt hat. Deshalb bin ich nicht auf die Idee gekommen, dass es daran liegen könnte. Gelesen hab ich die Thread ohne hin, nur traf das ja wie gesagt m.E. nicht auf mich zu.

Vielen Dank

Lösung, wenns nochmal Jemand braucht, wie beschrieben, die Abhandlung in einen Thread verpackt und die GUI aktionen per Invoke aufgerufen.