Laden...

Forenbeiträge von nicky Ingesamt 232 Beiträge

19.10.2011 - 23:53 Uhr

Hm, danke für deine Bemühungen! ..Aber so richtig weiss ich noch nicht wonach ich suchen soll bzw. werde aus den gegebenen Informationen nicht so richtig schlau.

19.10.2011 - 22:38 Uhr

Zwei Vermutungen, entweder ist die Anzahl der Verbindungen auf 20 begrenzt und dein Lesethread kriegt keine Verbindung mehr. Probier mal die Anzal der Threads auf 19 zu begrenzen.

Leider nicht 😦

Oder es kommt zu einer Race Condition wegen den Read-Write Locks auf die Tabelle.

Kannst du das genauer erklären?

19.10.2011 - 22:23 Uhr

verwendetes Datenbanksystem: Firebird 2.0 Embedded

Moin, ich verwende die Datenbank Firebird 2.0 Embedded. Meine Software erstellt 5 Threads, welche Berechnung XY durchführen und in die Datenbank schreiben. Klappt auch soweit echt gut!

Nebenbei möchte ich diese Datenbank mit einem "Refresh Button" in einem DB Grid darstellen. Klappt auch ganz gut...

Naja wenn ich die Threads jetzt auf 20 erhöhen dann krieg ich auf "Refresh" folgenden Fehler, was kann ich dagegen tun?

13.10.2011 - 22:04 Uhr

Okay, war relativ simple...

        public string FTPUpload(string filepath, string uploadpath)
        {
            string _rvalue = "";
            if (File.Exists(filepath) == true)
            {
                try
                {
                    //Create Folder
                    Uri createFolderURI = new Uri("ftp://" + host + ":" + port + uploadpath);

                    WebRequest createFolderRequest = WebRequest.Create(createFolderURI);
                    createFolderRequest.Credentials = new NetworkCredential(username, password);
                    createFolderRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
                    WebResponse createFolderResponse = createFolderRequest.GetResponse();
                    createFolderResponse.Close();
                    
                    //Create Content Buffer Array
                    FileInfo myFile = new FileInfo(filepath);

                    FileStream fs = myFile.OpenRead();
                    byte[] file_buffer = new byte[fs.Length];
                    fs.Read(file_buffer, 0, file_buffer.Length);
                    fs.Close();

                    //Upload File
                    Uri uploadFileURI = new Uri("ftp://" + host + ":" + port + uploadpath + myFile.Name);
                    FtpWebRequest uploadFileRequest = (FtpWebRequest)FtpWebRequest.Create(uploadFileURI);
                    uploadFileRequest.Credentials = new NetworkCredential(username, password);
                    uploadFileRequest.KeepAlive = false;
                    uploadFileRequest.Method = WebRequestMethods.Ftp.UploadFile;
                    uploadFileRequest.UsePassive = true;
                    uploadFileRequest.ContentLength = file_buffer.Length;

                    Stream fileUploadStream = uploadFileRequest.GetRequestStream();

                    int start = 0;
                    while (start != file_buffer.Length)
                    {
                        fileUploadStream.Write(file_buffer, start, 1);
                        start++;
                    }
                    fileUploadStream.Close();

                    FtpWebResponse uploadFileResponse = (FtpWebResponse)uploadFileRequest.GetResponse();
                    _rvalue = uploadFileResponse.StatusDescription;

                    uploadFileResponse.Close();
                }
                catch (Exception e)
                {
                    _rvalue = e.Message;
                }
            }
            else
            {
                _rvalue = "file not found!";
            }
            return _rvalue;
        }
    }
13.10.2011 - 19:30 Uhr

Hallo,

danke für deine Antwort. Ich habe vergessen zu erwähnen das ich dass auch schon probiert habe.

Habe es trotzdem soeben nochmal probiert, erfolglos!

Edit: Okay, ich wurde grad drauf hingewiesen das mein Code Schwachsinn ist und wie man es richtig macht 😃 Ich werde den fertigen Code dann posten 😃

13.10.2011 - 17:20 Uhr

Hallo,

ich habe folgende FTP Upload Methode geschrieben und in eine Klasse gelegt. Mein Hauptprogramm besteht aus einem string[] Array[4] welches Dateinamen enthält. Mit einer Schleife geh ich das Array durch, erstelle ein FTP Objekt meiner FTP Klasse und übergebe die jeweilige Datei meiner Upload Methode. (Ja, ich muss in diesem Fall das Object immer neu erstellen)

Folgendes passiert:

Datei 1 - Wird erfolgreich hochgeladen.
Datei 2 - Exception wird ausgelöst
Datei 3 - Wird erfolgreich hochgeladen.
Datei 4 - Exception wird ausgelöst

Fehlermeldung:
Der Remoteserver hat einen Fehler zurückgegeben: 226 Transfer complete

Ich vermute das es daran liegt das ich mich nicht ordentlich vom Server abmelde, hat jemand einen Vorschlag ?

PS: Ich habe nichts über einen richtigen Disconnect gefunden.

        public string FTPUpload(string filepath, string uploadpath)
        {
            string _rvalue = "";
            //check if file exists on local machine
            if (File.Exists(filepath) == true)
            {
                try
                {
                    //create file information object
                    FileInfo myFile = new FileInfo(filepath);

                    //create a byte array as a buffer that contains the file content
                    FileStream fs = myFile.OpenRead();
                    byte[] file_buffer = new byte[fs.Length];
                    fs.Read(file_buffer, 0, file_buffer.Length);
                    fs.Close();

                    //create folder
                    Uri _uri_folder = new Uri("ftp://" + host + ":" + port + uploadpath);
                    WebRequest createFolder = WebRequest.Create(_uri_folder);
                    createFolder.Credentials = new NetworkCredential(username, password);
                    createFolder.Method = WebRequestMethods.Ftp.MakeDirectory;
                    createFolder.GetResponse();

                    //upload file
                    Uri _uri_file = new Uri("ftp://" + host + ":" + port + uploadpath + myFile.Name);
                    FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(_uri_file);
                    ftp.Credentials = new NetworkCredential(username, password);
                    ftp.KeepAlive = false;
                    ftp.Method = WebRequestMethods.Ftp.UploadFile;

                    FtpWebResponse response = (FtpWebResponse)ftp.GetResponse();
                    _rvalue = response.StatusDescription;
                   
                    //upload the buffer array by using the ftp upload stream
                    Stream upload_stream = ftp.GetRequestStream();
                    int max = file_buffer.Length;
                    int start = 0;

                    //upload the stream
                    while (start != max)
                    {
                        upload_stream.Write(file_buffer, start, 1);
                        start++;
                    }

                    //close the stream
                    upload_stream.Close();
                }
                catch (Exception e)
                {
                    _rvalue = e.Message;
                }
            }
            else
            {
                _rvalue = "file not found!";
            }
            return _rvalue;
        }
    }


12.10.2011 - 22:59 Uhr

Alles klar, keine weiteren Fragen 😃

Vielen Dank !

12.10.2011 - 22:45 Uhr

Perfekt!

Deregistrierung von Ereignisse.. Das ist mir in diesem Zusammenhang nicht eingefallen 😃

Aber trotzdem, das erste Objekt besteht ja noch... (nur das dieses Objekt nicht mehr auf das Ereignis reagiert)

Unter welcher Vorraussetzung wird das Objekt vom GC gelöscht ? Erst wenn ich es auf "null" referenziere ?

12.10.2011 - 22:31 Uhr

Ja, also den Event Handler registriere ich im Konstruktor der Klasse "Kalkulation". Okay stimmt, wenn ich den Button erneut klicke dann erstelle ich ein neues Objekt und somit habe ich zwei Objekte die auf das Event reagieren.

Also muss ich mich erst darum kümmern das dass erste Objekt gelöscht wird bevor ein neues erstellt wird. (Ich brauche es ja ohnehin nicht mehr)

Hmm, oder fällt dir noch was anderes ein ?

12.10.2011 - 21:52 Uhr

Hallo,

ich beschäftige mich momentan bzw. immernoch mit dem Thema Multithreading und bin nun auf ein neues Problem gestoßen.

Nach einem Button Klick erstellt meine Hauptklasse (Windows Forms) ein Objekt aus der Klasse "Kalkulation". In der Klasse "Kalkulation" wird ein Objekt aus der Klasse "Berechnung" erstellt. Die Klasse "Berechnung" erstellt 5 Threads die etwas berechnen. Wenn alle Berechnungen fertig sind feuer ich in der Klasse "Berechnung" ein Event welches mit einer Methode (BerechnungFertig) aus der Klasse Kalkulation verknüpft ist.

Ich habe jetzt einen Breakpoint an die Stelle die das Event feuert gesetzt und einen Breakpoint in der Methode die von dem Event aufgerufen wird. Folgendes habe ich beobachtet:

Beim ersten Durchlauf wird der ersten Breakpoint 1x erreicht, der zweite Breakpoint auch 1x.

Drücke ich jetzt nochmal auf den Button wird der erste Breakpoint 1x erreicht und der zweite Breakpoint 2x.

Drücke ich erneut auf den Button wird der erste Breakpoint 1x erreicht und der zweite Breakpoint 3x.

Seltsam ?! Ich hoffe ich konnte es einigermaße verständlich beschreiben. Hat jemand eine Idee was hier passiert ? Erwartet hätte ich eigentlich das beide Breakpoints in jedem Durchlauf nur 1x erreicht werden.

Danke schonmal,

nicky

02.10.2011 - 23:46 Uhr

Perfekt ! Dankeschön !

02.10.2011 - 22:49 Uhr

Hallo,

ich verwende VS 2008 Professional. Ich wollte mir heute ein externes Control einbinden aber ich bin dabei auf folgendes Problem gestoßen:

Wenn man in den Einstellungen AutoToolboxPopulate auf "true" gesetzt hat sollte nach dem setzen des Verweis zur DLL automatisch die Komponente in der Toolbox erscheinen. Das ist aber nicht der Fall. Was mach ich falsch ?

Es geht um diese Komponente: Custom ProgressBar Control

02.10.2011 - 19:49 Uhr

Dankeschön, ich habs verstanden und es funktioniert!

Wahnsinn 😃

02.10.2011 - 18:55 Uhr

Danke für eure Antworten !

@ DESoft: Ja , das hab ich mitlerweile auch gelesen.. schade 😦

@ Nucky: Dein Code kann ihr irgendwie nicht so ganz nachvollziehen, kannst du den evlt. noch mal kurz kommentieren 😃

02.10.2011 - 15:45 Uhr

verwendetes Datenbanksystem:Firebird Embedded

Moin,

ich arbeite mich zur Zeit in die SQL Datenbank ein. Ich benutze dafür den Firebird Embedded Server.

Ich habe ein ungünstigen Table vorliegen: (Primary Key über alle 3 Felder)


Name 3|hello 123|some value 9393
Name 1|hello 533|some value 4333
Name 3|hello 323|some value 1111
Name 3|hello 523|some value 2393
Name 2|hello 223|some value 8765

Ich möchte nun alle 3 Felder abfragen jedoch sollen keine Datensätze selektiert werden deren Inhalt von Feld 1 schon in der Ergebnismenge ist.

... sodass ich folgendes als Ergebnis bekomme:


Name 3|hello 123|some value 9393
Name 1|hello 533|some value 4333
Name 2|hello 223|some value 8765

Ich habe an folgendes gedacht:

SELECT DISTINCT COL1, COL2, COL3 FROM MYTABLE;

Jedoch scheint sich der DISTINCT Befehl auf alle Spalten zu beziehen...

... auch mit SELECT DISTINCT (COL1), COL2, COL3 FROM MYTABLE; ... hatte ich kein Erfolg.

24.09.2011 - 23:49 Uhr

Hmm, an ein Interface habe ich auch schon gedacht, bzw ich hab's sogar schon probiert aber auch da habe ich Schwierigkeiten mit.

Ich glaube ich habe mich da in ein Gültigkeitsbereich Problem verannt oder so. Das Interface ist in der Thread.cs aufrufbar, die Methode jedoch nicht.

Vielleicht sollte ich es mir morgen nochmal angucken..

//Edit: Ich glaube ich brauche Events! Ich dachte ich kann irgendwie aus meiner Klasse (thread.cs) eine nicht statische Methode aus meiner (form.cs) aufrufen ohne ein neues Objekt zu erstellen aber irgendwie haut das nicht hin.

24.09.2011 - 23:03 Uhr

Ja, den Artikel habe ich gelese. Innerhalb meiner Form Klasse funktioniert es ja auch aber meiner Thread.cs ist die Methode garnicht sichtbar. Irgendwie steh ich echt auf dem Schlauch.

Mein Code in form.cs

        public delegate void DelJobProgressBar();

        public void UpdateProgressBar()
        {
            if (JobProgressBar.InvokeRequired == true)
            {
                DelJobProgressBar del_job_progressbar = new DelJobProgressBar(UpdateProgressBar);
                Invoke(del_job_progressbar);
            }
            else
            {
                JobProgressBar.PerformStep();
            }
        }
        #endregion

//Edit: Es ist nicht so als hätte ich nichts gemacht 😃

24.09.2011 - 22:51 Uhr

Moin,

ich habe mich ein wenig mit dem Multithreading beschäftigt. Als kleine Übungsaufgabe erstelle ich 10 Threads und jeder Thread bearbeitet zb. eine Textzeile. Ich habe für das Thread Objekt eine neue Klasse erstellt.

Das Problem ist das ich nach jeder Bearbeitung die ProgressBar auf meinem Formblatt updaten will.

Ich habe jetzt schon einiges über invoke, delegate und threadsicheres Aufrufen von Methoden gelesen jedoch habe ich keine Idee wie ich aus meiner Thread Klasse die Methode "UpdateProgressBar()" aus meiner Form Klasse aufrufe.

Ich hoffe ihr könnt mir einigermaßen folgen 😃

Danke für eure Hilfe!

31.08.2011 - 22:54 Uhr

Dankeschön für eure Antworten. Okay, Streams sind unverwaltete Ressourcen. In meinem Fall müsste ich sr.Dispose(); nach der Verwendung aufrufen.

Zum Thema Scope: Das habe ich noch nicht verstanden. Eine lokale Variable in einer Methode, 2 mal deklariert... Hmm da werd ich mich jetzt nochmal dran setzen 😃

31.08.2011 - 22:34 Uhr

Hi,

ich habe eine Frage zu der Freigabe von Variablen unter C#. Und zwar habe ich gelesen das man sich nicht mehr um das Freigeben kümmern muss weil der Garbage Collector diese Aufgabe automatisch übernimmt.

Weiterhin habe ich gelesen das lokale Variablen nach dem Aufruf der Methode vom Garbage Collector freigegeben werden.

Jetzt habe ich eine Frage zu folgendem Code:

            //load usernames
            if (File.Exists(res_user) == true)
            {
                StreamReader sr = new StreamReader(res_user);
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    sl_user.Add(line);
                }
            }

            //load passwords
            if (File.Exists(res_pass) == true)
            {
                StreamReader sr = new StreamReader(res_pass);
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    sl_pass.Add(line);
                }
            }

Hier deklariere ich 2 mal die gleiche Variable "sr" in der selben Methode, wie ist das möglich ?

30.08.2011 - 21:32 Uhr

Saubere Diagnose!

Ich danke dir vielmals! Ich hab mir jetzt die 3.5 Version besorgt - Jetzt kann es losgehen...

30.08.2011 - 21:18 Uhr

Was soll man dabei falsch machen ?

Ich habe die .dll in mein Projektordner gelegt und über den oben beschriebenen Weg als Verweis hinzugefügt.

Gleiches habe ich auch mit dem Pfad zur .Net Provider Installation versucht.

30.08.2011 - 21:10 Uhr

In der Projektmappe auf Verweise - Rechtsklick - Verweis hinzufügen!

Ich habe jetzt in der Projekteigenschaften unter "Verweispfade" den Pfad zu der .dll hinzugefügt, den Verweise selber geslöscht und neu hinzugefügt. Keine Veränderung... Seltsam!

30.08.2011 - 21:00 Uhr

Hmm naja das hat ja erstmal nichts mit meinem Problem zu tun oder?

Ich habe mal ein Bild angehängt. So sieht es direkt nach dem hinzufügen des Verweises aus...

29.08.2011 - 21:27 Uhr

Habe ich alles schon probiert. Erfolglos!

//Edit: Habe deinen "Edit" jetzt erst gelesen. Werde den Artikel gleich lesen.

29.08.2011 - 21:22 Uhr

Unter Pfad steht garnichts. Ich kann die Eigenschaft auch nicht verändern. Habe ich den Verweise möglicherweise falsch angelegt?

Projektmappe - Verweise - Verweis hinzufügen - xyz.dll

29.08.2011 - 20:54 Uhr

verwendetes Datenbanksystem: Firebird 2.5

Hi,

ich möchte eine Fb Embedded Datenbank Verbindung herstellen. Ich habe NetProvider installiert und in meinem Projekt einen Verweis auf die FirebirdSql.Data.FirebirdClient.dll erstellt.

Hier fangen die Probleme schon an. Im Projektmappen Explorer wird die .dll mit einem gelben Warenzeichen angezeigt. Wenn ich kompiliere bekomm ich folgende Warnung:

Fehlermeldung:
Warnung 2 Die Komponente "FirebirdSql.Data.FirebirdClient", auf die verwiesen wird, wurde nicht gefunden.

Die Datei ist jedoch vorhanden - Was mach ich falsch !?

28.08.2011 - 22:36 Uhr

Moin,

kann ich mit c# auf eine einzelne Line aus der Textbox per Index zugreifen ?

Ich suche sowas wie textBox1.Lines.Strings[0] o.ä 😕

Danke!

25.08.2011 - 21:11 Uhr

Natürlich ist das die falsche Einstellung. Deswegen bin ich auch so hartnäckig 😃

Also kommt Boxing / Unboxing nur vor wenn die Methode ein Objekt Datentyp erwartet. Naja ich werde wohl im Laufe der Zeit sehen ob und wie ich es einsetze... 😃 Im Moment kann ich die Idee nicht auf meine Projekte übertragen.

25.08.2011 - 20:59 Uhr

Dann macht das Lehren auch keinen Sinn 😃

"Mal was davon gehört zu haben, ohne das man einen Anwendungsfall kennt kann nicht das Ziel sein" ...

In meinem C# Buch 2008 findet man das Thema unter "Grundlagen", jedoch ohne Bsp.

25.08.2011 - 20:48 Uhr

Hey, danke für deine schnelle Antwort. Ich würde ich mich in C# sowie in Delphi nicht als "fortgeschritten" bezeichnen deswegen kann ich deine Antwort leider nicht deuten.

Hmm, ich finds einfach nur Ärgerlich das in der Literatur immer erklärt wird wie Boxing und Unboxing funktioniert, jedoch wird kein sinnvolles Beispiel zur Verwendung gezeigt. Naja ok, kann ich scheinbar erstmal nur so hinnehmen 😃

25.08.2011 - 19:41 Uhr

Hi Leute,

ich komme aus dem Pascal/Delphi Bereich und möchte mich ein wenig in Richtung .NET orientieren. Meine Entscheidung viel auf C# 😃

Beim durchgehen der Grundlagen bin ich auf "Boxing / Unboxing" gestoßen. Wie es funktioniert habe ich verstanden deswegen geht meine Frage nicht unbedingt auf die Grundlage an sich ein 😃

Welchen Vorteil habe ich wenn ich eine Integer Varibale (Wertetyp) in eine Object Variable (Referenztyp) "konvertiere"?

Folgenden Code kann man so oder ähnlich auf nahezu jeder Grundlagen Seite für C# sehen:

            int i = 321;
            object o = i; //boxed

Kann mir jemand erklären wann man davon Gebrauch macht ? Vielleicht mit einem kleinen Beispiel ?

Ciao, nicky