Laden...

Forenbeiträge von IamTheBug Ingesamt 401 Beiträge

25.06.2012 - 14:36 Uhr

Jo klar lese ich immer vorher, bevor ich hier jemanden belästige. Manchmal versteht man es eben falsch oder ich habe einfach das Beispiel falch umgemünzt auf mein Problem 😄

Danke vielmals. Dann kann ich dazu mal weiter experimentieren und lesen.
Das mit dem Eigenschaften ändern funktioniert auch 😃

25.06.2012 - 14:28 Uhr

aha 😄

Es sieht jetzt wie folgt aus. Ich habe von List<T> auf BindingList<T> umgestellt und jetzt bemerkt das Control schonmal ein Hinzufügen eines neuen Elementes.
INotifyPropertyChanged habe ich erstmal komplett weggelassen.
Die Schnittstelle wird wohl nur verwendet, wenn sich ein Eigenschaftswert innerhalb der Datenklasse verändert und diese Aktualisierung mitgeteilt werden soll?
Das heißt mit dem "es ist ein Element zur Liste hinzugekommen" hat das erstmal gar nichts zu tun oder?

25.06.2012 - 13:56 Uhr

Hm,

passiert trotzdem nix 😦
Muss ich mich an das NotifyPropertyChanged noch selber dran hängen oder passiert das automatisch? Ich dachte das ist der Vorteil und es passiert automatisch.

Ich habe an:


public event PropertyChangedEventHandler PropertyChanged

Nichts dran hängen, wenn das gefeuert wird.
Somit passiert natürlich auch nix.

25.06.2012 - 13:44 Uhr

Hallo,

ich habe ein kleines Verständnissproblem mit der INotifyPropertyChanged Schnittstelle.
Ich habe eine ListBox die ich mittels Datenbindung fülle.

Hier die Klasse die eine Liste von Elementen hält.


    public class myList : INotifyPropertyChanged
    {
        #region EVENTS
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(string pAction)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(pAction));
            }
        }
        #endregion

        private List<myType> mList = new List<myType>();
        public List<myType> List
        {
            get { return this.mList; }
        }

        public void AddType(myType pType)
        {
            this.mList.Add(pType);
            NotifyPropertyChanged("Name");   <--- was muss hier als string hin?
        }

Hier die Defintion von myType:


   public class myType
    {
        private string mName;

        public myType(string pName)
        {
            this.mName = pName;
        }

        public string Name { get { return this.mName; } }
    }

Klar geht ist eine Klasse zu viel um nur einen String zu halten aber die wird noch ausgebaut und kann/macht am Ende noch mehr.

Gebunden wird jetzt wie folgt.


myList tList = new myList();
this.listBox.DataSource = tList.List;
this.listBox.DisplayMember = "Name";

Das ganze funktioniert auch initial. Also habe ich vorher ein paar myTyps in die Liste gepackt werden mir deren Namen angezeigt.
Aber wenn ich die Datenbindung einmal getätigt habe und packe neue Elemente in die Liste wird das vom Controll nicht bemerkt.
Irgendwie verwende ich das falsch.

MfG

16.04.2012 - 08:37 Uhr

Danke!
Scheint daran gelegen zu haben. Man so ne dämliche Kleinigkeit.
Ich bin mir aber gar nicht mehr so sicher ob ich diesen VErfügbarkeitscheck vorher machen soll/muss.
Ich hatte den ja zuletzt rausgenommen, da es ja nicht ging und mir anders geholfen. Und zwar hatte ich ein try-catch um DownloadFile gestrickt und dann bekomme ich ja an der Stelle auch mit ob z.B. ein WebError 404 auftritt oder der gleichen.

Was meinst du?

Gruß

12.04.2012 - 16:30 Uhr

Hm,

ich habe gemerkt das das Problem doch etwas komplexer ist und nicht an der FileDownload Methode liegt.

Und zwar sieht es folgender maßen aus:


if (this.CheckAvailability(out tStatusCode, out tStatusCodeDescription))
{
string tTempPath = Path.GetTempPath();
this.GetFile(tTempPath);
}

GetFile ruft dann nur wie vorher schon gezeigt die FileDownloadMethode auf und lädt es in den Tempordner.

Das Problem ist aber vielmehr die CheckAvailability Methode die wie folgt aussieht. Hier kneift es anscheinend:


public bool CheckAvailability(out HttpStatusCode pStatusCode, out string pStatusCodeDescription)
{
pStatusCode = HttpStatusCode.ServiceUnavailable;
pStatusCodeDescription = HttpStatusCode.ServiceUnavailable.ToString();

HttpWebRequest tRequest = (HttpWebRequest)WebRequest.Create(this.mUrlToFile);
tRequest.Timeout = 10000;

HttpWebResponse tResponse;
try
{
 tResponse = (HttpWebResponse)tRequest.GetResponse();
 pStatusCode = tResponse.StatusCode;
 pStatusCodeDescription = tResponse.StatusDescription;
 return (pStatusCode == HttpStatusCode.OK);
}
catch (WebException we)
{
  if (we.Response != null)
   {
     pStatusCode = ((HttpWebResponse)we.Response).StatusCode;
     pStatusCodeDescription = ((HttpWebResponse)we.Response).StatusDescription;
     }
     else {
             pStatusCode = HttpStatusCode.RequestTimeout;
             pStatusCodeDescription = we.Status.ToString();
            }
      return false;
    }
   catch (Exception) { return false; }
}

Und zwar hängt das Programm still und heimlich in Folgender Zeile:

 tResponse = (HttpWebResponse)tRequest.GetResponse();

Irgendwie läuft das Prog dann da drüber hinaus und anschließend funktioniert der Dateidownload auch nicht.

Ich habe die Methode mal wie folgt geändert und zwar in


public bool CheckAvailability(out HttpStatusCode pStatusCode, out string pStatusCodeDescription)
{
pStatusCode = HttpStatusCode.ServiceUnavailable;
pStatusCodeDescription = HttpStatusCode.ServiceUnavailable.ToString();
return true;
}

So, nun ist es ja eigentliche egal, kommt halt immer "true" zurück und der Download startet. Ich habe jetzt das Problem nicht mehr das er bei der FileDownloadMethode angeblich hängt. Jetzt kann ich die sooft bedienen wie ich möchte.
Es liegt irgendwie an der Methode zur Dateiereichbarkeit. Diese wollte ich eben vorher prüfen bevor ich die Datei anfange zu laden.

Ich bin echt verwirrt 😄

10.04.2012 - 16:17 Uhr

So ich habe nochmal ein wneig rumgespielt und ausprobiert.
Der Fall tritt nur bei der einen Seite auf von der ich ein Bild laden möchte.
Nehme ich mir eine URL zu einem anderen Bild (z.b. irgend eins was google auspuckt)
funktioniert alles einwandfrei.

Kann es an dem Server liegen? Beende ich mein Programm und starte es sofort wieder kann ich das Bild erneut laden. Eben nur nicht 2 mal hintereinander im Programm.

Ich habe das ganze jetzt auch einmal anders ohne WebClient.DownloadFile() probiert und zwar wie folgt:


System.Drawing.Image tImage;
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(this.mFile);
httpWebRequest.Timeout = 20000;
HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream stream = httpWebReponse.GetResponseStream();
tImage = System.Drawing.Image.FromStream(stream);
tImage.Save(this.mPath);

mPath und mFile sind schon richtig und zeigen schon an die richtige stelle.
Aber auch bei der Verwendung von HttpWebRequest habe ich das selbe Ergebnis.
Es läuft einfach nicht 2 mal hintereinander.
Andere Bilder gehen aber wieder (die paar die ich getestet habe)

06.04.2012 - 14:39 Uhr

Hi,

ich mache nichts mit der Datei. Kein öffnen kein gar nix. Die liegt dann nur rum.
Auch bei einem anderen Dateinamen passiert nix. Also, bei zwei verschiedenen Dateinamen passiert das auch.
Es kommt auch keine Exception, er hängt nur ewig in der Zeile und irgendwann ist es eben dann zu ende nach 1-2 min. Sicher wegen TimeOut oder so.

06.04.2012 - 14:14 Uhr

Hallo.

Ich habe ein Problem mit der DownloadFile Methode der WebClient Klasse.
Es ist folgendes.
Ich habe eine Klasse geschrieben die einfach nur eine Datei mittels der Methode herunter lädt.
Das klappt auch, wenn ich die Methode das erste mal aufrufe, beim zweiten mal hängt das Programm bei "DownloadFile()".
Die Datei wird mit 0 Byte auf der HD erstellt aber es passiert nichts. Irgendwann kommt ein Timeout oder so und das Programm bzw. die Methode beendet sich.

Das Ganze sieht ungefähr so aus.


public myClass {

string mUrl;
string mFileName;

  public myClass(string pUrl) {
    this.mUrl = pUrl;
    this.mFileName = Path.Combine(Path.GetTempPath(), "datei.bin");
  }

  public void Download() {
    using (WebClient myWebClient = new WebClient()) 
   {
      myWebClient.DownloadFile(this.mUrl, fileName);	
    }
  }
}

Habe den Code jetzt aus dem Kopf geschrieben da ich das Projekt nicht vor mit habe. Aber so sieht er ungefähr aus, da ist nicht mehr und nicht weniger Code.
Ich habe in dem Projekt auch ein Formular mit 2 Buttons angelegt die jeweils die Klasse erzeugen und die Methode aufrufen.
Klicke ich den ersten Button, lädt er die Datei und es geht alles. Klicke ich den Button erneut passiert nix. Dann hängt er bei DownloadFile().
Klicke ich Button1 und dann Button2 hängt er bei Button2.
Klicke ich Button2 und dann Button1 hängt er bei Button1.
Was ich damit sagen will, es liegt einfach generell daran, wenn ich die Methode ein weiteres mal aufrufe. Ob in der selben Klasseninstanz nochmals oder in einer anderen Instanz, vollkommen egal.
Wo liegt das Problem? Was mache ich verkehrt?
Muss noch etwas bereinigt oder gesetzt werden?

URL und Dateiname sind 100% in Ordnung.

Gruß und Danke

29.03.2012 - 14:52 Uhr

Danke für deine Hilfe.
Wieder was gelernt. Aber ich glaube das schießt hier weiter über das Ziel hineaus. Bzw. was Kosten <-> Nutzen angeht ist das nicht sinnvoll.
Da ich nicht 100erte Settings habe sondern es wirklich nur um den einen Wert geht werde ich das ganze wohl in einer eigenen config datei ablegen die ich anschließend einfach mit einem streamReader oder der gleichen auslese.

Danke

29.03.2012 - 14:07 Uhr

Wie genau wird die C#-DLL aus der nativen Anwendung aufgerufen?

Hm keine Ahnung genau. Es gibt da einen "Wrapper". Dem kann ich in einer Config sagen wie die DLL heisst (bzw. wo sie liegt) und die Einstiegsklasse. In der Einstiegsklasse ruft er eine festgelegte Methode auf.

Was gibt in deiner DLL ein Assembly.GetExecutingAssembly().Location zurück?

Das gibt mir genau den Pfad zu meiner DLL zurück z.B.
C:\MeineDll\meine.dll

29.03.2012 - 13:44 Uhr

Hm ok.
Na dann geht das wohl nicht wie ich mir das vorstelle oder ich verstehe es nicht.
Ich habe nämlich eine Delphi/C++ Anwendung und diese ruft meine C# dll auf.

Ich weiß jetzt gar nicht wie die config datei heißen muss und wo die liegen muss.
Ich kann auch nix an dem Delphi/C++ Programm ändern bzw in den Programmpfad config Dateien ablegen.

Da scheint das Setting wohl nicht brauchbar für meine Zwecke zu sein oder?

29.03.2012 - 13:16 Uhr

Ich erstelle doch aber nur eine *.dll die ich in ein anderes Programm einspiele.
Und wenn ich im Visual Studio so ein Property anlege wird mir automatisch zur DLL die *.dll.config datei generiert.
Ich dachte dann das diese config Datei für meine DLL ist.

Also meine Projektausgabe ist eine Klassenbibliothek.

29.03.2012 - 09:21 Uhr

Hi,

ich habe ein Projekt bei dem ich mit dem Property Editor ein Merkmal hinzugefügt habe.

Das sieht wie folgt aus:
Name -> URL
Typ -> Webdienst_URL
Bereich -> Anwendung
Wert -> http://google.de

In meinem Projekt lese ich mittels

string myUrl = Properties.Settings.Default.URL;

Den Wert aus.
Allerdings soll es jetzt möglich sein die Seite zu ändern die ausgelesen wird. Da es auf Anwendungsbereich gestellt wurde kann dies natürlich nicht zur Laufzeit geschehen und geändert und auch nicht gespeichert werden sondern nur zwischen den Sitzungen.

Also öffne ich die entsprechende XML Datei die nebem meinem Projekt liegt (projektname.dll.config) und gehe an die stelle


<setting name="Configurator_URL" serializeAs="String">
                <value>http://google.de</value>
</setting>

und ändere das in:


<setting name="Configurator_URL" serializeAs="String">
                <value>http://gmx.de</value>
</setting>

Dann starte ich das Projekt neu.
Allerdings ändert sich nix. Es wird immer noch google.de ausgelesen und gesetzt. Woran liegt das? Was mache ich falsch?

08.11.2007 - 14:57 Uhr

Ok,

hast ja recht, will da ja nicht weiter rum reden. Waren nur auf die schnelle 3 ideen und ehrlich gesagt habe ich das selber noch nie so umgesetzt sondern arbeite auch in meinem aktuellen projekt an dieser stelle mit events.
keine ahnung warum ich da jetzt auf die 3 Vorschläge kam 😁

egal, events sind schon das bessere mittel das stimmt

08.11.2007 - 14:41 Uhr

das wäre bei lösung 1 so, halte ich auch für schlecht und würde ich nicht machen
waren dinge die mir schnell durch den kopf gingen.

Ja events sind eine gut elösung, aber was spricht dagegen das die mainklasse von der zweiten klasse einen wert zurück bekommt und somit selber den ProgressBar aktualisiert?

Oder, was spricht dagegen der zweiten Klasse den progressbar mitzugeben und diese aktualisiert den.
Somit könnte man die zweite klasse mit jedem progressbar den man will verwinden.
Was mit events sicher auch geht.
Ich würde hier auch events vorziehen, aber ich würde nicht sagen das diese 2 genannten Vorshcläge total schlecht sind und nicht verwendet werden sollten oder?

08.11.2007 - 14:35 Uhr

deine zweite klasse muss entweder die main klasse kennen (übergeben der klasse beim aufruf oder die main singelton machen) und das progressbar musst du irgendwie zugänglich machen (z.b. public property)

oder du rufst aus der main klasse von der anderen immer eine funktion auf die dir entsprechende werte zurückgibt und das aktuallisieren macht wieder deine main klasse

oder du übergibst deiner zweiten klasse beim aufruf der funktion das progressbar was es aktualisieren soll

das wären 3 mehr oder weniger gute lösungen 😉

edit:
boah grad eben standen doch noch keine lösungen hier 😁

ich wollte auch noch auf
[FAQ] Kommunikation von 2 Forms

verweisen 😜

bzw, die möglichkeit mit einem eigenen event hatte ich vergessen bzw ausser acht gelassen. ich denke mal das wird erstmal zu kompliziert für einen anfänger (und ich gehe mal davon aus das du einer bist bei dieser standard frage 🙂 )

29.10.2007 - 11:59 Uhr

edit: 😁

18.10.2007 - 14:37 Uhr

ich schliesse mich da herbivore an. Glauben kann ich das auch nicht.
Wenn der Button disabled ist (also ausgegraut) kommt kein klick event.

eine quick and dirty lösung wäre die abhandlung über eine variable.
z.b. bool mBerechnung.

die setzt du auf true wenn gerechnet wird, und im click event von button 2 checkst du ob die true ist oder nicht und machst dort arbeit oder nicht.
nach der berechnugn setzt du es auf false.

wie gesagt würde ich nicht so machen, wäre mir zu dirty und primitiv.

Ich würde auch das machen und Vorshclagen, was ouzo1986 sagte.
Dem Click Event einfach die auszuführende Funktion wegnehmen und wieder hinzufügen. Das wäre in meinen Augen das schönste und beste.

27.09.2007 - 11:08 Uhr

Argh, suuuuuuuuper es scheint zu gehen 🙂
Bin begeistert, vielen dank.

Jetzt hab ich auch meinen Fehler gesehen, hab mir nochmal den Unterschied beim "aktivieren" aneguckt.


Type tTypeInterface = tPluginType.GetInterface(pPluginInteface, true);

Damit hole ich ja nur Interfaces bzw das angegebene Interface. Deswegen heisst die Funktion auch GetInterfaces 🙂
Das geht natürlich mit der Klasse nicht.
Deswegen muss ich mit IsSubClassOf arbeiten, wie du es sagtest.
Hab das jetzt mal so hier aufgearbeitet den Gedankengang, für die Nachwelt 😉
Falls was falsch war korregier mich.
Warum gibt es eigentlich kein GetClass?
Ich muss mir die ganzen tollen Methoden mal noch angucken die das Assambly so bietet, muss mich damit mal mehr beschäftigen, man kann ja auch die Funktionen einfach so abrufen und durchprüfen. Ach super 🙂
Danke

26.09.2007 - 16:21 Uhr

naja mein programm kennt doch aber die abstracte klasse CLASS aus der plugin.dll auf die ich ein Verweis erstellt habe.
Hm, das muss doch gehen, oder drück ich mich nur falsch aus 😉
Ein anderes Programm nutzt diese Plugins ja auch.
Wie gesagt ich guck mir das heute abend nochmal in ruhe an eventuell macht es klick bei mir oder ich kann mich etwas genauer ausdrücken. 🙂

26.09.2007 - 14:14 Uhr

Hi,

also so wie du es geschrieben hast mache ich es auch bei Interfaces und zwar so:
(Sorry hab grade nicht den genaue Code vor mir, mache es aus dem Kopf, ich gucke heute abend nochmal nach und poste genaueres)


newPlugin.Instance = (IPlugin)
   Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));

Das ganze läuft ungefähr wie hier beschrieben:
http://www.codeproject.com/csharp/pluginsincsharp.asp

wie gesagt mit einem Interface was implementiert wird habe ich das alles schon erfoglreich gemacht.
Aber jetzt ist es so das ich weiss das in myPlugin.dll eine Klasse CLASS steckt die von der abstracten Klasse plugin.CLASS (die in plugin.dll steckt) abgeleitet wird.

ungefähr so:


using plugin   <- Verweis auf plugin.dll wurde erstellt jetzt "use" es :D

public class Class : Plugin.Class
{
}

Ich will also diese Classe laden und nicht ein vorher definiertes Interface.

Wenn ich für den oben geposteten Code für
pPluginInteface folgendes übergebe "plugin.IMyInterface" dann lädt er auch das Interface

und die Zeile


if (tTypeInterface != null)

wird als true ausgewertet, sprich tTypeInterface ist verschiedenen von null.

übergebe ich aber als gesuchten Type "plugin.Class" (also den Klassennamen) ist es immer null

Ich hoffe es wird etwas klarer was ich meine.

Gruß

IamTheBug
der sich wahrscheinlich gedanklich wieder selbst im Weg steht 😉

25.09.2007 - 21:54 Uhr

Hi,

ich melde mich seit langem zurück und habe gleich eine Frage 😉
Ich habe eine plugin.dll, sprich also eine dll die funktionen für Plugins stellt.
Diese kommt nicht von mir. Jetzt habe ich eine dll namens myPlugin.dll die ein Plugin darstellt.
Ich weiss jetzt das dort eine Klasse MyClass vorhanden ist die von einer abstracten Classe abgeleitet wurde.
Wie kann ich jetzt zur Laufzeit diese Klasse laden? So wie ein Plugin halt.
Ich kenne die ganzen Beispiele mit den Interfaces usw. Damit habe ich auch schon sehr erfolgreich programmiert, doch bei diesem Problem (Klasse laden anstatt Interface) komme ich nicht weiter.


Assembly tPluginAssembly = Assembly.LoadFrom(pPlugin);

//Next we'll loop through all the Types found in the assembly
foreach (Type tPluginType in tPluginAssembly.GetTypes())
{
if (tPluginType.IsPublic && !tPluginType.IsAbstract) //Only look at public types and non-abstract types
{
 //Gets a type object of the interface we need the plugins to match
 Type tTypeInterface = tPluginType.GetInterface(pPluginInteface, true);
 //Make sure the interface we want to use actually exists
 if (tTypeInterface != null)
{}
}
}

das habe ich immer genutzt, wobei Plugin der volle Pfad zur dll war und Plugininterface die angabe was geladen werden soll z.B. Plugin.IPlugin

aber wie gesagt das geht bei mir nur mit Interfaces... bisher 😉

Gruß und Danke

24.03.2007 - 14:19 Uhr

ungtestet sollte es auch irgendwie so gehen:


foreach (Control c in this.Controls)
            {
                if (c is Label)
                {
                    c.Text = string.empty;
                }
            }

22.03.2007 - 21:57 Uhr

Original von sarabande
Her mit dem Code, der nicht funktioniert!

Der Spruch ist zu geil.
Von dem Code kann ich dir ne Menge liefern. Warte ich hole nurmal eins meiner Projekte aus der Schublade 😁

zu geil der Spruch

20.03.2007 - 19:31 Uhr

und nachträglich auf einer vorhandenen Datatable kann ich diese Tabelle nicht "zerhacken". Durch irgendwelche SQL Befehle oder so?

Denn ich bekomme nunmal die Daten so aus der Datenbank bzw über eine Schnittstelle. Gut ich kann sie verändern, aber der Aufwand, der Aufwand 😁

20.03.2007 - 18:27 Uhr

Hi,

mir ist klar wozu die Klasse da ist und was sie macht usw. Ich habe mit der Klasse auch schon experimentiert aber leider keinen Erfolg gehabt.

18.03.2007 - 20:34 Uhr

Das hat nichts damit zu tun das nur wissende das Forum nutzen drfen, deine Frage ist einfach nur eine Grundlagenfrage der Grundlagen um nicht zu sagen sau dumm. Sorry für den Ausdruck aber das ist so. Wie wenn einer sagt er braucht einen Führerschein, weil er Auto fahren will und dann fragt: "was ist eigentlich ein Auto".

Nimm dir erstmal ein Einführungsbuch und lies das, das hilft schon.

16.03.2007 - 15:16 Uhr

Hey,
ich habe folgendes Problem. Ich möchte eine Datatable an mehrere Steuerelemente binden aber ich weiss noch nicht genau wie ich das machen soll.

Es sieht so aus: Ich bekomme eine Tabelle aus der Datenbank zurück mittels Dataprovider und der Fill()-Methode.
Ich habe dann eine Tabelle die folgendermassen aufgebaut ist.

ID | Name | Format | Default

TypA| Prop1 | string | "TEST"
TypA| Prop2 | int | 32
TypA| Prop3 | string | "TEST"
TypB| Prop1 | string | "TEST"
TypB| Prop2 | string | "TEST"
TypB| Prop3 | int | 32

es gibt also auch keinen UNIQUE Key.

jetzt soll das ganze aber an ein Datagridview gebunden werden das nur die erste Spalte anzeigt ohne doppelte einträge.

Dann soll man einen Typ auswählen können und in einem weiteren Datagridview sollen dann neue Properties für jeden Typ hinzugefügt werden können. Wenn man dann ein propertie hinzugefügt wird soll man über eine combobx das format wählen können und in einer Textbox den default-wert angeben können.

Wie binde ich nun die eine Tabelle an all diese Steuerelemente mit den oben beschriebenen Verhalten.
Ich dachte auch erst daran diese Tabelle zu nehmen und im Speicher in ein Dataset umzuwandeln das aus meheren tabllen besteht. Wo ich eine Tabelle nur an das erte Datagridview binde usw usw.
Ich weiss aber nicht ob das die richtige und ebste Herangehensweise ist bzw wie kann ich auf diese Datatabel einen SQL Befehl ausführen um eine andere Dattable zurückzubekommen. (z.b. Um die erste spalte als Datatable ohne doppelte einträge zu erhalten)

12.03.2007 - 13:44 Uhr

Original von Robar
Aber an der FH Hagenberg, für die ich mich interessiere, gibt es die Möglichkeit sich beim Studentenverein anzumelden und einen Tag im Leben eines Studenten mitzuerleben.

Sprich: Ihr geht einen trinken oder wie? 🙂

12.03.2007 - 10:39 Uhr

So dann will ich mich auch nochmal zu Wort melden 😉.

Ich finde die Diskussion geht immer in die Richtung Informatiker == Programmierer, und wer ist nun ein guter und wer nicht. Also ein Informatikstudium ist nicht grundsätzlich dazu da, um hinterher der Oberprogrammierer zu sein und das als Beruf auszuüben. Da gibts auch viele gute Mathematiker oder gelernte Programmierer die das machen. Mit einem Studium bleiben einem hinterher halt viel mehr Möglichkeiten was das Berufsfeld angeht, als wenn man "nur" eine Ausbildung zum "Softwareentwickler" gemacht hat oder wie es sicht nennt.
Dies ergibt sich nicht nur aus den normalen Vorlesungen eines Studiums sondern auch durch diese dort wählbaren Nebenfächer sowie Vertiefungsgebiete.
Z.B. kann man als Nebenfach sachen wie Mathematik (oh gott noch mehr g), Elektrotechnik, Maschinenbau, Biomedizinische Informatik wählen. Und im Vertiefungsgebiet wählt man für einen Interesseante Themengebiete und vertieft diese halt mehr als es bei einer 3 Jährigen Ausbildung mit Praxis möglich wäre.

Der andere Punkt den ich noch sehe ist (auch, wenn ich dieses auch nicht 100% Unterstütze) ist halt, das man bei einer Bewerbung auf eine Stelle als Dipl. Informatiker (oder jetzt Master) eventuell die besseren Karten hat als jemand mit einer Ausbildung. Ich denke mal zum grossen Teil wir das so sein. Eventuell ist dieser Vorteil nicht so stark, wenn beide direkt aus der Ausbildung kommen, denn da könnte eine Programmierfirma schon sagen wir nehmen den ausgebildeten Programmierer der hat mehr Erfahrung ABER ich denke mal, wenn man sich in 10 Jahren nochmals bewerben muss gilt man als Dipl. Informatiker als flexibler im Wissen bzw. aneignen von Wissen und erkennen von Zusammenhängen. Ob dieses nun so ist sei dahingestellt, ich will ja nicht sagen das Leute mit einer Ausbildung sich kein eigenes Wissen aneignen können. Ich denke aber ein Arbeitgeber wird das so sehen und sein Einstellungsentscheidung nach der vorliegenden Qualifikation treffen.

Ich denke nämlich auch das es einem relativ wenig nützt, wenn man daheim Bücher wältz und sich für alles Interessiert und "den Mega-Plan" hat, aber keinen einzigen Nachweis in Form von Zertifikaten, Ausbildungsbescheinigungen oder eben Erfahrung im Tätigkeitsbereich bei anderen Firmen hat. Versuch das mal einen Arbeitgeber zu vermitteln das du der beste bist und alles weisst aber auf keine Art und Weise nachweisen kannst das es so ist. So viel nur zu dem Argument: "Wenn du dich ganz ganz dolle dafür Interessiert wirst du gut und genommen".
Ich bin auch nicht Box-Weltmeister obwohl ich ganz tolle im Keller trainiere und Mega-Muskeln habe. Nur leider habe ich noch nie wirklich internationale Kämpfe im Ring geboxt 👅 (ich vermisse an dieser Stelle den Ironie Smiley)

@Robar: Tag der offenen Tür ist gut, da sollte man hingehen und sich die Uni angucken und Informieren was man da so machen kann usw. Leider stellt man im Nachhinein fest das einem dieser Tag aber wirklich nix gebracht hat. Man weiss nun auch nicht wirklich was einen in dem Studiengang vermittelt wird und wie dann alles abläuft und ob dieses einem gefällt und genau das ist was man tun will. An dem Tag wird doch die Uni nur schön geredet durch Statistiken usw. Aber man sollte trotzdem hingehen und sich mal ein Bild von allem machen.

@7.e.Q: Nein kein Dire Straits Fan wieso?

09.03.2007 - 00:15 Uhr

Sorry, wenn ich mich kurz halte aber es ist schon spät 🙂

So eine Ausbildung kannst du im Grunde nicht mit einem Studium vergleichen.
Du hast so viele Themengebiete und Lehrstoffe die wirst du in so einer Ausbildung nie haben und auch niemals davon was hören. Bei so einem Informatikstudium, hast du dann Fächer, da hättest du dir vorher nie träumen lassen das es sowas gibt (im positiven wie auch negativen Sinne)

Wenn du so eine Ausbildung machst wirst du immer nur der "dumme" User sein der weiss wo er hinklickt und hier und da seine MS Produkte (als certifizierter MS-ler) ganz toll einstellen kann, aber du wirst wohl nie so das technische Verständniss haben und einen Gesamtüberblick erhalten wie beim Studium.
Ich will damit jetzt keinenm zunahe treten der eine Ausbildung gemacht hat und sagen Studium ist das einzigst wahre aber die wird bei so einer Ausbildung eine menge fehlen. Ob du nun alles vom einem Studium später wieder brauchst sei dahingestellt, aber ich denke das ist überall so. Wenigstens hast du dann aber schonmal von vielem gehört und kannst das einordnen, wenn du in deinem Arbeitsumfeld auf diese Themen stösst.
An der Uni fehlt trotz vielen Praktikas oft der Bezug zur Praxis und damit meine ich nicht das man stundenlang schuften muss sondern einfach die Umsetzung der Theorie an "real existierender" Software oder anderen Sachen.
Der Groschen fällt dann meist wenn du im Praktikumssemster bist oder nebenbei bei einer Firma jobbst.

Wenn du ein super-toller programmierer werden willst nützt dir aber so ein reines Ifnromatiker Stuidum nix. Dort bekommst du es auch nicht vermmittelt. Man erklärt nur Konzepte und Methoeden sowie Theorien. Für Hardcore-Programmierer gibt es Ausbildungen bzw wird einem gesagt "Schnapp dir nen Buch und mach selber. Und Üben Üben und nochmals Üben".
Aber nach einer Programmierausbildung kannst du eben "nur" programmieren. Das wohl besser als jeder Student (ausser er macht in der freizeit selber was programmiertechinsches, aber vom uni-stoff her reichts da nicht).
Dir fehlt dann aber wissen zu Komplexitätstheorie, Algorithmentheorie, zu Rechnerarchitekturen, das viele Mathe und wenig Elektrotechnik und Hardware sowie Telematik zeug wird dir wohl auch fehlen. Da gibt es echt einiges.

Ist natürlich auch abhängig davon was du für eine Ausbildung machst. Bei einer ausbildung als Systemadmin wirst du natürlich viel über Netzwerke lernen aber dafür wahrscheinlich nicht so viel Mathe und ALgorithmenZeug haben sowie Rechnerarchitektursachen. Oder auch so wunderbare Sachen wie Suchalgorithmen von Suchmaschinen oder Künstliche Neuronale Netze für interaktives Verhalten von Robotern (Gesichts und Spracherkennung und Bewegungserkennun usw.)

Wobei es auch schon Unterschiede im Studium gibt von FH zur Uni. An der FH wird meines Wissens nach auch nciht so viel TheoInf gelehrt und manche Themengebiete nich so sehr vertieft.

Falls sich jemand durch die Meinung gestört fühl kann er gerne gegen argumentieren. Ist nur meine Meinung 😉

Jetzt wurde es doch etwas mehr g

Gruß und Nacht

19.12.2006 - 23:18 Uhr

ah thx.
es kann so einfach sein. Einfach alles was geshared wird in dort definieren wo das interface definiert wird und alle greifen von dort aus zu.
Laut ersten Tests scheint es zu funktionieren, hoffentlich treten da keine weiteren Probleme und fragen auf 😉

Danke

19.12.2006 - 23:03 Uhr

Hey,

so das dies eigentlich nicht geht weiss ich aber ich wollte euch zum lesen locken 😁 und ich wusste nicht wie ich es anders beschreiben soll.

Ich habe folgendes Problem:
Ich habe meine Hauptprogramm das ich Plugin basierend schreiben will.
Hauptprogramm steht, eine Klasse zum Plugin Managen auch.
Für die Plugins habe ich ein Interface definiert, das die Plugins integrieren müssen. Ist das der Fall lädt der Pluginmanager das Plugin.
Soweit so gut.

Jetzt will ich aber im Interface eine Funktion definieren die mit einem Parameter aufgerufen wird. Dieser Parameter soll aber eine Klasse sein die im Hauptprogramm definiert wird und dort schon Verwendung findet (es handelt sich um eine Klasse die ein paar Werte speichert unf Funktionen hat und dann per List<> für mehree Elemente diese Informationen speichert).
Doch ich kann ja im Interface diese klasse nicht benutzen. Wie löst man das Problem jetzt das ich solche Klassen aus dem Hauptprogramm nun auch im Interface nutzen kann bzw in den Plugins die das Interface dann implementieren.

12.12.2006 - 16:50 Uhr

Hey,

ich habe nochmal eine Frage zu dem Thema "Button auf einer Webseite drücken".

Für das "WIE" verweise ich nochmal hierdrauf da ist es wunderbar erklärt.

ChatBot

Jetzt aber meine Frage. Nachdem ich das getan habe, wie bekomme ich die Antwortseite in das angelegte WebBrowserelement. bzw. wichtiger ist für mich die zurückgegebene URL da dort die session id enthalten ist.
Da müsste ich rankommen.

edit:

im html code der seite steht folgendes:

<td class="lbl" style="width:80px">Benutzername:</td><td><input type="text" name="user" value=""></td>

somit ist doch "user" die ID für das Textfeld oder? Also nicht das ich da schon was falsch mache.
und beim button sieht es so aus

<input type="submit" value="Login" name="login">

also kann ich den ja mit login ansprechen oder?

11.12.2006 - 21:21 Uhr

ich würd einfach die entsprechende function dann mit application.run() aufrufen und somit läuft dann das eine bzw das andere als eigenständiges programm.

so wie es dir dein visual studio standardmässig bei jedem programm anlegt das eine form hat.

denke mal das wäre ein weg

10.12.2006 - 19:07 Uhr

ListView.Columns.Add(string key, string text)

da geht das 😉
und ich dachte das zieht sich dann halt wunderbar durch alle subitems durch der key.
Ach ja. Framework 2.0.

Ok das mit dem umsortieren teste ich. Könnte ja wirklich sein das es keine Auswirkung hat und ich mich umsonst verrückt mache.

10.12.2006 - 19:00 Uhr

ne, ich kann für so eine coloum direkt einen key angeben, keinen imagekey.
Sondern einen Key für dieses Coloumn halt. Und ich dachte damit könnte ich dann wunderbar weiter arbeiten.
Denn es wird ja nicht funktionieren wenn ich die subitems per index anspreche und der user aber die coloumns umsortiert hat oder?

10.12.2006 - 18:40 Uhr

Das auslesen am Besten in einem eigenen Thread laufen lassen und immer wenn es was ausgelesen hat ein Event feuern. Dann reagiert deine Form mit dem Prograssbar dadrauf und erhöht sich. Das ganze per invoke machen.

10.12.2006 - 18:38 Uhr

Hey,

es geht sich um folgendes 😁 😁 😁

Ich habe ein ListViewItem und würde gerne dessen Subitems per Key und nicht per Index ansprechen. Doch leider gelingt mir das nicht.

Folgendes habe ich


ListView.Columns.Add("Size","Size");
ListView.Columns.Add("Remaining","Remaining");

also ich erstele die columns mit einem namen und einem kay dazu.
Jetzt will ich aber bei einem listviewitem das ich einfach mit new erzeugt habe und mit ListView.Items.Add() hinzugefügt habe die subitems per "Size" und "Remaining" ansprechen aber das macht er nicht.
Wo ist der Denkfehler. Wie gebe ich den Subitems die Keys mit das ich diese darüber ansprechen kann.

Gruß und Danke

06.12.2006 - 20:23 Uhr

gut danke. das bringt mich schonmal etwas vorran.

eine kleine Frage habe ich noch.
Sollte man die Downloadklasse eher so gestalten das man ihr eine url gibt und einen lokalen dateinamen und die klasse dann alles speichert und macht

oder

lieber so das man der download klasse nur eine url gibt und diese klasse dann die datei runterlädt und die empfangenen bytes "nach aussen" zurück gibt und die klasse die die downloadklasse aufgerufen hat dann das lokale fileschreiben übernimmt.
Ich meine das wie beim socket oder streamreader wo man ja sagt

Pseudocode:
while (socket returns data)
write data_to_file

Oder ist das eher ansichtsache?

06.12.2006 - 18:50 Uhr

Hey,

ich bräuchte mal einen Gedankenanstoss. Bin mir noch nicht ganz klar wie ich es am Besten umsetzen soll.

Also ich wollte einen kleinen Downloadmanager programmieren.
Ich habe schon eine Klasse die die url und einen lokalen dateinamen erhält und das downloaden übernimmt.
Und ich habe auch schon in einer anderen Klasse eine Form mit einer Listview.
Jetzt soll in der Listview untereinander stehen was geladen wird und dahinter in % wieviel schon geladen wurde.

Es können auch mehrere Downloads gleichzeitig laufen. (alles multithread)
Jetzt weiss ich nur noch nicht wie ich das am besten miteinander verbinde.
Wie schaffe ich es das die z.B. 3 laufenden Downloadklassen mit der Form kommunizieren? Indem jedes ein even raised auf das die form reagiert?
Wie mache ich das am besten das eine Downloadklasse mit einer Zeile im Listview verbunden ist und nur diese aktuallisiert?

Gruß

IamTheBug

30.11.2006 - 09:10 Uhr

ja bin noch dran

implementiere aber im momen die http streaming variante, dann werd ich wohl rstp machen. Ich halte diese erstmal für einfacher und dann werd ich das "richtige" mms streaming nochmal versuchen

20.11.2006 - 22:38 Uhr

jetzt bin ich gespannt. was heisst komerzielles interesse?
wills wer kaufen? oder willst das nicht verraten?

20.11.2006 - 20:45 Uhr

hmm

bei dir sieht das alles so schön aus 😉

naja so viel bekomme ich noch nicht.

Auf mein erstes Kommando bekomme ich irgendwie immer nur wieder nur so eine art MMS command packet header zurück.
Und auf das zweite Kommando kommt schon gar nix mehr.

Ich bin mir auch mit den Formatierungen nicht sicher. Ob ich das richtig formatiere. ob er das richtige los schickt. Wie ich das zurückbekomme. Das was ich bekomme, wie bekomme ich das in so schönen ASCII Text wie du?
Alles versuche mein gefülltes byte-array nach dem socket auslesen in string zu formatieren endeten kläglich.

edit: wo kann man sich denn auch mal dein projekt angucken? habe schonmal was gesaugt aber das schien nicht aktuell zu sein und das ging auch nicht wirklich.

20.11.2006 - 18:03 Uhr

Hey

ich poste mal was ich bisher habe. Irgendwie komme ich einfach nicht weiter. Ich glaube ich bekomme nicht die richtigen antworten vom server oder so.
Auf mein cmd2 bekomme ich schon gar keine antwort mehr.

die Variablen definitionen usw


        #region command_t class
        private class command_t
        {
            #region variables
            private byte[] m_buf;
            private int m_num_bytes;
            #endregion

            #region properties
            public byte[] buf
            {
                get { return this.m_buf; }
            }
            public int num_bytes
            {
                get { return this.m_num_bytes; }
                set { this.m_num_bytes = value; }
            }
            #endregion

            public command_t()
            {
                this.m_buf = new byte[MMS.BUF_SIZE];
            }

        }
        #endregion

        #region Definations
        private const int BUF_SIZE = 102400;
        //vars
        private string url = string.Empty;
        private int port = 1755;
        private Socket socket = null;
        private int seq_num = 0;
        private int num_stream_ids = 0;
        private int output_fh = 0;
        private MMS_Test instance;
        #endregion

Connect Methode



       public void Connect()
        {

            //der quelltext den du geschrieben hast (einfach von der url die html seite holen)
            string result = SocketSendReceive(url, 80);

            string str = string.Empty;
            byte[] data = new byte[1024];
            byte[] answer = new byte[1024];
            int asf_header_len = 0;
            string asf_header = string.Empty;
            int i;

            //hier auf port 1755 verbindung für befehle aufmachen
            IPHostEntry hostInfo = Dns.GetHostEntry(this.url);
            IPEndPoint ep = new IPEndPoint(hostInfo.AddressList[0], this.port);
            //this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            this.socket = new Socket(ep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            this.socket.Connect(ep);

            #region cmd1
            //first initialze command
            str = "\034\003NSPlayer/7.0.0.1956;{33715801-BAB3-9D85-24E9-03B90328270A}; Host: " + hostInfo.AddressList[0];
            data = this.string_utf16(str, 0);
            //send the first command
            this.send_command(1, 0, 0x0004000b, data.Length, data);

            //read the answer of the first command
            System.Threading.Thread.Sleep(500);
            while (this.socket.Available > 0)
            { 
                i = this.socket.Receive(answer, SocketFlags.None);
            }

            //log answer here
            this.log_answer(answer,"cmd1_from_server");
            #endregion

            #region cmd2
            str = "\002\000\\\\192.168.0.1\\TCP\\1037\0000";
            data = this.string_utf16(str, 8);
            this.send_command(2, 0, 0, data.Length, data);
            System.Threading.Thread.Sleep(500);
            while (this.socket.Available > 0)
            { 
                i = this.socket.Receive(answer, SocketFlags.None); 
            }

            this.log_answer(answer, "cmd2_from_server");
            #endregion

            #region 0x05 -> send path including filename (on server) to file
            str = "a551/d1/8D0/HU3GW9Q4GP2BOBV7U7BPCRETGUHTY8JK9.wma?c=FKH";
            data = this.string_utf16(str, 8);
            this.send_command(5, 0, 0, data.Length,data);
            
            this.get_answer();
            #endregion
        }


das utf16 umwandeln der strings


        private byte[] string_utf16(string str, int offset)
        {
            byte[] str_bytes = Encoding.Unicode.GetBytes(str);
            byte[] ret = new byte[offset + str_bytes.Length + 2];
            Buffer.BlockCopy(str_bytes, 0, ret, offset, str_bytes.Length);

            return ret;
        }

das kommando senden


        private void send_command(int command, UInt32 switches, UInt32 extra, int length, byte[] data)
        {
            MMS.command_t cmd = new command_t();
            int len8 = 0;
            int i = 0;

            len8 = (length + (length % 8)) / 8;

            cmd.num_bytes = 0;

            this.put_32(ref cmd, 0x00000001);               //start sequence
            this.put_32(ref cmd, 0xB00BFACE);               //B00BFACE ;-))
            this.put_32(ref cmd, (UInt32)(length + 32));    //length of command until the end of all data,
                                                            //value is in byte and starts from after the protocoll type
            this.put_32(ref cmd, 0x20534D4D);               //protocol type "MMS ", fixed value, reads "MMS<space> in ascii (big endian)
            this.put_32(ref cmd, (UInt32)(len8 + 4));       //length until end of packet in 8 byte boundary lengths. including own data field
            this.put_32(ref cmd, (UInt32)(seq_num++));      //sequence number, starts from 0, server echoed 0 back, than client raise
            this.put_32(ref cmd, 0x0);                      //unknown, network timing?
            this.put_32(ref cmd, 0x0);
            this.put_32(ref cmd, (UInt32)(len8 + 2));       //length until end of packet in 8 byte boundary lengths. including own data field
            this.put_32(ref cmd, (UInt32)(0x00030000 | command));     // direction flow (0x03 = to server; 0x04 = to client) | mms command
            this.put_32(ref cmd, switches);
            this.put_32(ref cmd, extra);

            Buffer.BlockCopy(data, 0, cmd.buf, 48, data.Length);    //acts like memcpy(dest,source,length)

            this.socket.Send(cmd.buf,length + 48,SocketFlags.None);

            //write loglins here, get log data with get_32-function

        }

das loggen zum testen in ein textfeld


        #region log answer for testing
        private void log_answer(byte[] data, string description)
        {
            instance.textBox1.Text += description;
            instance.textBox1.Text += System.Environment.NewLine + Convert.ToString(get_32(data, 0), 16);
            instance.textBox1.Text += System.Environment.NewLine + Convert.ToString(get_32(data, 4), 16);
            instance.textBox1.Text += System.Environment.NewLine + Convert.ToString(get_32(data, 8), 16);
            instance.textBox1.Text += System.Environment.NewLine + Convert.ToString(get_32(data, 16), 16);
            instance.textBox1.Text += System.Environment.NewLine + Convert.ToString(get_32(data, 20), 16);
            instance.textBox1.Text += System.Environment.NewLine + Convert.ToString(get_32(data, 32), 16);
            instance.textBox1.Text += System.Environment.NewLine + Convert.ToString(get_32(data, 36), 16);
            instance.textBox1.Text += System.Environment.NewLine + Convert.ToString(get_32(data, 40), 16);
            instance.textBox1.Text += System.Environment.NewLine;
            instance.textBox1.Text += System.Environment.NewLine;
            instance.textBox1.Text += System.Environment.NewLine;
        }
        #endregion

das ist doch erstmal richtig oder?

ich verstehs nicht. warums nicht so richtig will.
Oder hättest/hast du was anders gemacht?

edit: put_32 sieht aus wie im original c quelltext

19.11.2006 - 14:06 Uhr

ja eine frage noch, was ich schonmal fragte:

dieses unsigned char, womit kann ich das am besten nachbauen?
Denn das gibts anscheinend so in C# nicht.

19.11.2006 - 13:48 Uhr

ah ok. danke.
das mit dem port habe ich schon gelesen (im quelltext und in dieser inoffiziellen dokumentation)

der tipp mit der klasse für struct ist nicht schlecht. so werd ichs wohl machen. danke.

18.11.2006 - 14:48 Uhr

ich habe noch ein paar probleme beim "übersetzen"

der Datentyp "unsigned Char" in c++ ist welcher Datentyp in c#?
Welchen nehme ich da? UChar gibt es nicht direkt. Muss ich da mit Byte arbeiten?

wie übersetze ich folgende Struktur?



#define BUF_SIZE 102400

typedef unsigned char uint8_t;

typedef struct {

  uint8_t buf[BUF_SIZE];
  int     num_bytes;

} command_t;


nach C# Syntax?

naja geht nur langsam vorwärts aufgrund mangelnder c++ kenntnisse 😉
aber das wird schon g

Ach eins noch: die ganzen char-arrays (char[]) kann ich ja durch string ersetzen oder?
die werden ja in c++ nur benutzt da es kein richtigen string gibt sondern nur eine string klasse. oder?

16.11.2006 - 22:27 Uhr

dann erstmal aller besten und grössten Dank 😁

ich werde mir das mal angucken und versuchen zu verstehen und umzusetzen.
Es lässt sich ja im Netzt auch nur schwer was dazu finden. Danke für den Ansatz.