Laden...
Avatar #avatar-3141.jpg
wickedcsharper myCSharp.de - Member
Anwendungsentwickler C# Köln Dabei seit 31.07.2008 160 Beiträge
Benutzerbeschreibung
professional C#

Forenbeiträge von wickedcsharper Ingesamt 160 Beiträge

06.11.2008 - 16:37 Uhr

Hallo, folgendes ist der Fall.

Die Form1 arbeitet also mit der seriellen Schnittstelle ->COM
Form1 ruft MainForm auf. Über den Button Start wird eine Methode der Klasse DShowNet aufgerufen, die ebenfalls (nehme ich an COM anspricht).

Ein Clich auf Start ruft etliche Methoden(zur Initialisierung) und u.a. die methode mediaCtrl.Run(); diese sorgt nun dafür, dass DirectX die Verbindung zwischen Camera und Panel herstellt und stellt die Funktion dar, an der anschliessend die serielle Kommunikation abbricht und auch nach schliessen des Formulars nicht mehr anzutriggern ist.

ich habe daher versucht, die entsprechende Funktion in einem asynchronen Aufruf zu starten, sprich in einen eigenen Thread zu legen. Folgende Zeilen habe ich dem Quellcode hinzugefügt:

                //asynchronder Delegatenaufruf
                dmediaController u = new dmediaController(callmediactrlRun);
                u.BeginInvoke(new AsyncCallback(AfterFetch), "");

anstelle des ursprünglichen mediaCtrRun. Diese liegt nun in der asynchron
aufgerufenen Methode callmediactrRun (um besser abgefangen werden zu können):

      public void callmediactrlRun()
        {
            int hr = 0;
            try
            {
                hr = mediaCtrl.Run();
                if (hr < 0)
                    Marshal.ThrowExceptionForHR(hr);
            }catch(Exception ee)
            {
                MessageBox.Show("Could not start video stream\r\n" + ee.Message);
                return ;
            }
        }

die Funktion AfterFetch der BeginInvoke Methode:

        public void AfterFetch(IAsyncResult result)
        {
            
            MessageBox.Show(" Delegate completed. State: {0}" + result.AsyncState);
            AsyncResult async = (AsyncResult)result;
            dmediaController dmed = (dmediaController)async.AsyncDelegate;
             dmed.EndInvoke(result);
            MessageBox.Show("  EndInvoke");
        }

Nun funktioniert zwar der asynchone Aufruf - aber die serielle Schnittstelle ist weiterhin nicht ansprechbar. Beim Googlen habe ich was von einer Message-Pump gelesen und eben von asynchronen Delegaten. Aber irgendwie komme ich hier auch nicht sinnvoll weiter.

06.11.2008 - 11:19 Uhr

Hallo,

danke für die schnelle "Anteilnahme".

ich konnte den Fehler durch ein kleines Teilprojekt eingrenzen.
Es liegt an dem VideoPanel der besagten Form2.

Dieses VideoPanel wird durch die methode namens activateVideoPanel();
mit der Camera verbunden. Hier kommen dann hunderte weitere Initialisierungsmethoden und variablen der Klasse DShowNet ins Spiel - sprich DirectX.

Bevor ich weitere Fragen stelle versuche ich hier den Fehler noch was weiter einzugrenzen.

06.11.2008 - 10:05 Uhr

Hallo zusammen,

habe schwerwiegendes Problem. Da zeitkritisch, könnte es meinen Job kosten!
Bearbeite ein riesen Projekt C# mit einigem Quellcode meines Vorgängers, was völlig undokumentiert ist - scheisse !

folgendes: über eine RS232 bekomme ich Daten aus einem Gerät welches wiederum über verschiedenste Sensoren verfügt. Die Daten werden über so schönlautende Klassen wie MainSerport, SerPort und SerialDataConverter eingelesen und über Invoke Methoden auf meiner Form ausgegeben. Funktioniert wunderbar. Aus der selben Form rufe ich über einen Button dann eine Form2 auf, die Daten über DirectX aus einer laufenden Camera holt, captured und über diverse Bildverarbeitungsmethoden weiterverarbeitet.

Das Problem: Sobals ich aus Form2 wieder in Form1 wechsel funktioniert die Kommunikation mit der seriellen Schnittstelle nicht mehr. Selbst Ports schliessen und erneut öffnen funktioniert nicht mehr. Nur das komplette Schliessen der Anwendung hilft hier - für Kunden unzumutbar. Dazu reicht es die Form2 einfach nur zu öffnen.
Ich suche erstmal nach Möglichkeiten den Fehler einzugrenzen - besser noch danach zu suchen den Fehler ordentlich zu definieren/beschreiben. Der Quellcode ist einfach zu mächtig um ihn hier zu posten

könnte es sich hier um Invoke Probleme handeln? Kommt man hier mit DoEvents weiter.
Ich finde keine Lösung... und bitte um dringende Hilfe !sitze schon seit Tagen dran 🤔

09.09.2008 - 16:08 Uhr

ist zwar schon älter der Beitrag aber dennoch mein Senf:

Zum Thema checkBoxen deaktivieren noch folgendes:
mit diesem einfachen Code lassen sich zur Laufzeit alle checkBoxen aktivieren/deaktivieren:


        public void initCheckboxes()
        {
            CheckBox ChkBAkt = new CheckBox();
            foreach (Control CtrlC in this.Controls)
            {
                if (CtrlC is CheckBox)
                {
                    ChkBAkt = (CheckBox)CtrlC;
                    ChkBAkt.CheckState = CheckState.Unchecked;
                }
            }

        }

19.08.2008 - 11:33 Uhr

Hi,

ich halte von den PIas wenig 😛. Zuviel geschreibsel:
Oledb ist doch wesentlich einfacher. Ein DataTable zurückgegeben
und mit ner foreach Schleife ausgelesen fertig:


       public DataTable getDataFromXLS(string strFilePath)
        {

            try
            {

                string strConnectionString = string.Empty;

                strConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFilePath + @";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""";

                OleDbConnection cnCSV = new OleDbConnection(strConnectionString);

                cnCSV.Open();

                OleDbCommand cmdSelect = new OleDbCommand(@"SELECT * FROM [Form1$]", cnCSV);  //E14 - E51

                OleDbDataAdapter daCSV = new OleDbDataAdapter();

                daCSV.SelectCommand = cmdSelect;

                DataTable dtCSV = new DataTable();

                daCSV.Fill(dtCSV);

                cnCSV.Close();

                daCSV = null;

                return dtCSV;

            }
            catch (Exception ex)
            {
                MessageBox.Show("Error in ClassExcelReader:" + ex.Message.ToString());
                return null;

            }

            finally { }

        }

😁

08.08.2008 - 11:33 Uhr

Hi,

Checkboxen und Databindings sind etwas problematisch.
Ich helfe mir mit versteckten Feldern (visible: false), die über ein BindinSource Werte über die Datenbank beziehen. Ändert sich ein Wert im versteckten Feld (Event: OnTextChange),
dann fülle ich die Checkbox mit true oder false je nachdem was für ein Wert in meinem versteckten Feld steht ("True" /"False" oder soetwas)

Man muss nur dran denken, das versteckte Feld kurzfristig sichtbar zu machen, indem Moment, wo man z.B. durch die Datenbank blättet.

hoffe konnte helfen...

04.08.2008 - 14:07 Uhr

Hallo,

benutze VS 2008 mit Vista und entwickle eine Kundenanwendung.
Habe textboxen, die ich in Align, Font , BorderColor etc. verändert habe.

Mir ist aufgefallen, dass die TextAlign Eigenschaft, wenn einmal auf Right gestellt nicht mehr auf Left geht, selbst wenn es im Eigenschafteexplorer so steht ??? Erst manuelles setzen im Quellcode mit

this.textBox1.TextAlign = HorizontalAlignment.Left;
this.textBox1.RightToLeft = RightToLeft.No;

lösst das Problem. Hat den riesen Nachteil, dass wenn mans nicht weiss, Texte nicht mehr richtig in die Textboxen zu schreiben sind, bzw. der Cursor permanent vertauscht ist. 🙄
Sind soche oder ähnliche Bugs in VS2008 bekannt ?

komisch war auch folgendes: Die Textboxen habe ich mit der TextChanges Methode mit der Button5_OnClick Methode verbunden, die ein Update auslöst. Nach Löschung der Funktion aus dem TextChange Event , wurde diese (die Update Methode) ebenfalls weiterhin ausgelöst. 😭

Hier half erst einmal ebenfalls nur einmal auf Null setzen per Quellcode. Danach war der Evvent dann wieder leer.

Speichert der Eigenschaftsexplorer manche Einstellungen noch nicht ordentlich ab ??

Wäre dankbar für einen Hinweis.