Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von mosspower
Thema: App.config Generator
Am im Forum: .NET-Komponenten und C#-Snippets

Jetzt könnt ihr wie gewohnt arbeiten, denn jetzt wird immer vor einem Build der Task zum generieren des Configfiles ausgeführt.

Anbei noch der Quellcode (alles mit 3.5 compiliert, sollte aber auch mit 2.0 laufen, hier muss dann aber BuildFramework von 2.0 eingebunden werden) - viel Spass dabei.

Thema: App.config Generator
Am im Forum: .NET-Komponenten und C#-Snippets

So, jetzt wird der ein oder andere einwenden, dass man das immer zweimal compilieren muss, da ja das Auslesen des Configfiles vor dem Ausführen des Quellcodes gecached wird ... auch dafür eine Lösung, ich habe einen eigenen Task geschrieben, diesen bindet ihr dann folgendermaßen in die jeweilige Projektdatei ein:

<UsingTask TaskName="Generator.AppConfig.AppConfigGeneratorTask" AssemblyFile="lib\Generator.AppConfig.dll" />

  <Target Name="AppConfigGeneratorTarget">
    <AppConfigGeneratorTask QTemplateFile="App.config.template" QProjectHome="$(MSBuildProjectDirectory)" Release="$(Configuration)" Web="false" />
  </Target>

  <Target Name="BeforeBuild" DependsOnTargets="AppConfigGeneratorTarget" />

Thema: App.config Generator
Am im Forum: .NET-Komponenten und C#-Snippets

In Zukunft braucht man also kein App.config (oder Web.config) File mehr ... ich löse das dann einfach mit einem Template-File, dass ich in der Umgebung manipuliere, siehe Screenshot ...

Thema: App.config Generator
Am im Forum: .NET-Komponenten und C#-Snippets

Der Outputf für die Testumgebung sieht dann so aus, bei production="false" ...

Thema: App.config Generator
Am im Forum: .NET-Komponenten und C#-Snippets

Der Screenshot zeigt ein einfaches Template-File. Das Root-Element lautet configuration, wie auch im generierten Config-File, hier habe ich aber zusätzlich noch das Attribut production eingebaut. Dies ist der Schalter für Produktions- oder Testumgebung.

Danach habe ich das constants Element eingebaut. Hier können globale Variablen deklariert werden - man kann sich aussuchen, ob diese globalen Variablen für alle Umgebungen gleich (Attribute value) oder unterschiedlich (Attribute test.value und prod.value) vorhanden sind. Eingebunden werden die Variablen dann einfach mit der Schreibweise ${key} (ja, ja, der sogenannte Ant-Style - man kommt nie ganz weg von Java). Der Generator ersetzt dann alle Vorkommnisse im Quellcode (die Variablen dürfen auch öfters in einem value-Attribut vorkommen, siehe key modul.a.q.file.

Danach kommen die bereits bekannten configSections- und connectionStrings-Abschnitte ... sollten klar sein denke ich

Dann der ebenfalls bekannte Abschintt appSettings. Hier habe ich ein Zusatzelement section eingebaut, so dass hier nach Modulen, Aufgaben, Einheiten oder Projekte gekapselt werden kann. Hier kommen sich dann verschiedene Entwickler nicht in die Quere, oder aber man benutzt ein Configfile für meherere Projekte. Aufpassen muss man hier, dass man Unique-Keys (wie im normalen App.config File ja auch) verwendet (sollten halt sprechend sein - ich schreibe immer lange Keynamen mit Punkt getrennt, wie in den guten alten Java-Propertyfiles). Im Attribut name kann man dann nähere Angaben machen, wie z.B. ein Modul beschreiben. Will man eine Section nur für ein oder bestimmte Projekte generieren lassen, dann benutzt man das optionale Attribut include. Hier können mit Pipes getrennt, Projektnamen angegeben werden. Nur für diese wird dann das section Element aufgelöst und generiert. Standardmäßig werden alle section Elemente generiert, wenn nicht explizit include-Element angegeben ist. Der Generator entfernt dann alle section-Elemente und fügt alle add-Elemente an das appSettings-Element.

Zum Schluß kann man dann noch das custom-Element verwenden für eigene Sections. Hier werden dann auch die values dementsprechend ersetzt.

Der Output, also das generierte Configfile, sieht dann so aus, bei production="true" ...

Thema: App.config Generator
Am im Forum: .NET-Komponenten und C#-Snippets

Background:
Ihr kennt ja sicherlich auch, wie nervig das ist, wenn man Configfiles pflegen muss für Testumgebung und Liveumgebung. Da wird hin- und herkopiert, teilweise zwei Files erstellt, ein- und auskommentiert usw. Auch übel ist, wenn für einen Kunden mehrere Projekte (Consoleanwendung, Service, Admin-GUI ect.) erstellt werden und diese zu 80 Prozent identische Constanten (Datenbank, Resourcen, Pfade ect.) haben. Dann wird wieder kopiert, neue Files erstellt, und wenn es mal größere Änderrungen (Datenbank, Server, Pfade ect.) gibt, dann geht nix mehr (oder man ist einen Tag drüber das Gedöns glattzustellen). Leidig ist das Thema auch, wenn viele Mitarbeiter am gleichen Projekt arbeiten und es sehr viele Keys im Configfile gibt, Stichwort Mergekonflikte, bzw. "Zerschießen" von Eintragungen, die ein Kollege bereits eingechecked hat, weil man die "überbuttert" hat.

Lösung:
Ich habe einen Generator geschrieben, der genau dies in Zukunft verhindert. Man kann "normale" Values nehmen, die gelten für Test- und Produktionsumgebung, oder aber, je nach Bedarf, die Prefixe test. oder prod. dem Attributnamen voranstellen. Aufgrund des Attribute-Flags production, im Element configuration, wird dann der jeweils benötigte Wert durch den Generator eingesetzt. Auch können abhängig von der ausgeführten Assembly Einträge vorgenommen werden, (appSettings > sections), so dass nur die relevanten Sectionen generiert werden. Bei der Generierung wird ein Schema verwendet, das ist eincompiliert, bzw. eine embedded Resource. Eins vorweg. Ich habe das auch mit einer Web.config getestet, funktioniert wunderbar, alle Teile, die nicht im Schemafile definiert sind, z.B. (system.web oder runtime) müssen dann in das Element custom eingefügt werden. Nichtsdestotrotz werden auch hier die jeweiligen Values ersetzt. Bei Benutzung von Domaincontrollern müssen manuelle Anpassungen durchgeführt werden. Was der Generator gegenwärtig macht, und mir reicht das erst mal völlig, ist, dass immer im Ausführungsverzeichnis der Anwendung, z.B. Name der Anwendung ist GenerationTest, die Datei GenerationTest.exe.config erstellt wird. Bei Webanwendungen wird im Projektrootverzeichnis immer die Web.config erstellt. Desweiteren werden auch Konstanten unterstützt, diese sind sehr hilfreich, bei mehereren Pfadangaben auf z.B. dem gleichen Server, für diesen braucht dann nur einmal eine globale Variable erstellt werden.

So, fangen wir mal mit einem Screenshot und einem kleinen Beispiel an ...

Schlagwörter: Configuration, Config. App.config

Thema: Globalisierung: Fehler- und Hinweismeldungen des .NET-Frameworks
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

kann mir mal jemand erklären, wie die Fehler- und Hinweismeldungen beim .NET-Framework zustandekommen, bzw. von welchen Parametern (wenn man hier überhaupt was "drehen" kann) abhängen? Ich habe bisher gedacht, dass ich "einfach" die CultureInfo (UI) umstellen kann. Klappt für Datum, Zahlen ect. - jedoch bekomme ich dann meine Fehlermeldungen immer noch auf Englisch, wenn ich z.B. auf deutsch "umswitche". Ist es so, dass hier immer die Sprache des installierten Frameworks hergenommen wird (und alles andere wird ignoriert)? ... das wäre ja mittelalterlich ;( 8o ...

Gruß und danke schon mal für etwaige Antworten im Voraus

Thema: Wie abfangen - The process cannot access the file because it is being used by another process
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

bin leider auch nicht an die nötigen Infos rangekommen, naja, ich habe eine Utilitymethode gecoded ...

 public static bool IsFileUsedByOnotherProcess(Exception ex) {
      bool isUsedByOtherProcess = false;

      if(ex != null && ex is IOException) {
        // Check global settings
        CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
        CultureInfo defaultCulture = GlobalizationUtil.GetDefaultCulture();

        if(!currentCulture.DisplayName.
          Equals(defaultCulture.DisplayName)) {
          // Switch culture
          Thread.CurrentThread.CurrentCulture = defaultCulture;
        }

        isUsedByOtherProcess = Program.FILE_USED_REG_EX.IsMatch(ex.Message);
        
        // Reswitch culture
        Thread.CurrentThread.CurrentCulture = currentCulture;
      }

      return isUsedByOtherProcess;
    }

Thema: Frage über die Gestaltung eines Mainforms
Am im Forum: GUI: Windows-Forms

Alternativ kannst Du auch UserControls verwenden ... im Zusammenspiel mit meinem DropDownMenu-Control eine echte Alternative.

Thema: Wie abfangen - The process cannot access the file because it is being used by another process
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo JAck30lena,

Nein, leider nicht, geht immer in die IOException rein ...

hier ein Beispiel ...

static void Main(string[] args) {
      try {
        new Thread(Read).Start();
        new Thread(Read).Start();
      }
      catch(Exception ex) {
        Console.WriteLine("Fehler " + ex.Message);
      }

      Console.WriteLine("Done ");
      Console.ReadLine();
    }

    public static void Read() {
      TextWriter textWriter = null;

      while(true) {
        try {
          textWriter = new StreamWriter(@"C:/test.txt");
          textWriter.WriteLine("blub");
          textWriter.Flush();
          Thread.Sleep(1);
        }
        catch(UnauthorizedAccessException ex) {
          Console.WriteLine(ex.GetType().FullName);
        }
        catch(Exception ex) {
          Console.WriteLine(ex.GetType().FullName);
        }
        finally {
          try {
            textWriter.Close();
          }
          catch {
            // Blub
          }
         
        }
      }
    }

Thema: Wie abfangen - The process cannot access the file because it is being used by another process
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ihr kennt sicherlich diesen IO-Fehler. Wie aber kann man genau diesen abfangen, wenn ich auch andere IO-Fehler handeln möchte? OK, eine Idee wäre, die CultureInfo vor dem Zugriff umzuswitchen und den Fehlertext lesen - aber das kann es ja nicht sein - gibt es hierfür einen Workaround oder sogar einen Errorcode?

Gruß und Danke schon einmal im Voraus für etwaige Antworten

Thema: DropDownMenu Control
Am im Forum: .NET-Komponenten und C#-Snippets

@Easyrider,

stimmt, habe ich vergessen zu erwähnen. Das Projekt ist mit 3.5 compiliert - sollte aber ohne weiteres auch mit 2.0 laufen, da keine 3.0 / 3.5 spezifischen Befehle verwendet werden.

Thema: DropDownMenu Control
Am im Forum: .NET-Komponenten und C#-Snippets

... hier kann man zusätzlich noch Events benutzen und Eventhandler hinzufügen (zu den registrierten Typen, die reflektiert werden) ... in meinem Projekt sieht das dann so aus ...

 
// New DropDownMenu instance
this.dropDownMenu = new DropDownMenu();

// Add menu to menu panel
this.panelMenu.Controls.Add(this.dropDownMenu);

// Add event handler for message exchange
DropDownMenuEventHandler dropDownMenuEventHandler =
  new DropDownMenuEventHandler("ExchangeMessage", "LogToConsole", this);
dropDownMenuEventHandler.InvokeMethodTypes = new Type[] { typeof(String), 
  typeof(Object), typeof(ConsoleLoggerConfig), typeof(bool) };
this.dropDownMenu.EventHandlers.Add(dropDownMenuEventHandler);

// Add event handler for exception exchange
dropDownMenuEventHandler = new DropDownMenuEventHandle("Exception", "HandleException", this);
this.dropDownMenu.EventHandlers.Add(dropDownMenuEventHandler);

// Menu control background color
this.dropDownMenu.BackColor = Color.Gainsboro;

// Add events
this.dropDownMenu.ContentChanged += new DropDownMenu.OnContentChanged(dropDownMenu_ContentChanged);
this.dropDownMenu.EventException += new DropDownMenu.OnEventException(dropDownMenu_EventException);

// TODO config file path via constant
this.dropDownMenu.Render(Application.StartupPath + 
  "/../../Config/Menu/menu.xml", this.panelContent);

That's it, für die ganze Anwendung, alle Aufgaben können so schön gekapselt in eigenen Usercontrols gecoded werden, diese werden dann einfach im XML-File als type angegeben und dann reflektiert ... anbei noch der Quellcode.

Gruß

Thema: DropDownMenu Control
Am im Forum: .NET-Komponenten und C#-Snippets

Der Quellcode ist gründlichst dokumentiert. Hier eine kurze Zusammenfassung:

Was kann das Menu alles, bzw. was wird unterstützt:

Dropdown-Verhalten, also Auf- und Zuklappen von Hauptmenueinträgen
Hover-Efekt (Mouseover)
Berechtigungsabfragen (IDropDownMenu.HasPermission, XML-Attribute check-permission)
Resourcenunterstützung (Stichwort Mehrsprachigkeit, Attribute resource)
Registrierung von Eventhandler (DropDownMenu.EventHandlers.Add)
Instanzierung von registrierten Typen Diese werden geladen, wenn Menueintrag geklickt wird

Das Menu braucht als Input zum Rendern ein XML-File (Schema-File ist im Sourcecode dabei). Aus diesen Einträgen wird dann das Menu generiert:

Kurze Erklärung:

Hauptknoten Element menu
Attribut resource: Die Resource für die darzustellenden Texte, es kann nach der Resource ein Komma angegeben werden mit darauffolgendem Assemblynamen
Attribut width und color: .. is klar ... wobei bei color immer ein Hauptmenueintrag gemeint ist - die Submenus haben gegenwärtig immer die gleiche Farbe

Kindknoten Element entry
Attribut name: Hier kann der Menu-Text stehen und wenn resource angegeben (Element menu), denn ist dies der Key für die Resource
Attribut check-permission: Berechtigungen können abgefragt werden. Hier muss das Interface IDropDownMenu implementiert werden. Es wird dann die Methode HasPermission mit dem Namen (siehe Attribute name) aufgerufen. Hat ein Haupmenueintrag keine Berechtigung, wird das komplette dazugehörige Untermenu ausgeblendet, bzw. wenn für alle Untermenus keine Berechtigungen vorliegen, dann wird auch nicht der zugehörige Hauptmenueintrag angezeigt.
Attribute sub: Ob es sich um ein Subeintrag handelt oder nicht (man kann also einzeln oder komplett auf Untermenus verzichten)
Attribute type: Das ist der voll-qualifizierte Typ, ggf. mit Assemblyangabe, von welchem eine Instanz erstellt wird, nachdem der Eintrag geklickt wurde (kann auch für Hauptmenueinträge gelten, je nach dem, i.d.R. wird bei einem Hauptmenueintrag kein Typ angegeben, so dass das Menu nach einem Klick lediglich aufklappt)

Wie benutze ich das Teil:

Die Methode Render aufrufen, mit folgenden Parametern:
Voll-qualifizierter Name des XML-Input-Files,
Target-Control, zu diesem wird dann die Instanz, bei Klick auf einen Menueintrag mit konfiguriertem Typ (Element entry, Attribut type), geadded - dies ist i.d.R. ein Panel
und ggf. als dritten Parameter Objekt mit implementierten Interface IDropDownMenu (ist Pflicht, wenn bei mind. ein Eintrag check-permission gesetzt ist)

Für obige Farbbeispiele ist das demnach ein Einzeiler und sieht so aus:

this.dropDownMenu1.Render(this.qConfigFile, this.panelTest);

... that's it ...

In einem meiner Projekte sieht das dann so aus ...

Thema: DropDownMenu Control
Am im Forum: .NET-Komponenten und C#-Snippets

Beschreibung: DropDownMenu Control:

Hallo,

hier mein neues DropDownMenu Control. Erst mal ein Screenshot, weiteres folgt gleich ...

Schlagwörter: DropDownMenu, Menu, DropDown

Thema: To prevent possible data loss before loading the designer, the following errors ...
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Doch nicht gelöst, jetzt hat er viel länger nicht gemeckert und jetzt wieder das gleiche - kennt den jemand? Warum serialisiert der? Wo kann ich das abstellen?

Thema: To prevent possible data loss before loading the designer, the following errors ...
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ach Gottchen,

hatte ich doch vergessen, alle Objekte (auch die Basisklasse) von der Formklasse mit Attribut Serializable zu kennzeichnen.

Hat sich erledigt, sorry, Leutz

Thema: To prevent possible data loss before loading the designer, the following errors ...
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich komme hier irgendwie nicht weiter. Ich werde einfach nicht schlau aus der Fehlermeldung. Kennt den jemand, kann mir jemand helfen?

die Klasse sieht so aus:

/
  // <summary>
  /// Class for configured event handler
  /// </summary>
  [Serializable]
  public class DropDownMenuEventHandler {
    private String eventName = String.Empty;
    private String invokeMethodName = String.Empty;
    private Type[] invokeMethodTypes = null;
    private BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic;
    private Object formTargetInstance = null;

    /// <summary>
    /// Public constructor
    /// </summary>
    /// <param name="eventName">The name of the event</param>
    /// <param name="invokeMethodName">The name of the method to invoke</param>
    /// <param name="formTargetInstance">The instance where to invoke the method</param>
    public DropDownMenuEventHandler(String eventName, String invokeMethodName, 
      Object formTargetInstance) {
      this.eventName = eventName;
      this.invokeMethodName = invokeMethodName;
      this.formTargetInstance = formTargetInstance;
    }


Irgendwie kann der Typ nicht serialisiert werden. In diesem Fall ist das Object vom Type Windows.Forms.Form. Warum will er das überhaupt serialisieren? Kann ich das abstellen. Komisch ist, dass wenn ich die Anwendung neu starte es immer beim ersten Mal passt, jedes weitere Mal, wenn ich den Designer aufrufe (was macht der eigentlich im Hintergrund?), dann bekomme ich diese total nervige Fehlermeldung.

Danke schon mal für etwaige Hilfe im Voraus

Thema: [gelöst] Verwaltung von Utilityklassen
Am im Forum: Rund um die Programmierung

@JuyJuka,
@herbivore,

OK, ihr habt mich dann doch (fast!, bei pluralen Namespaces bleibe ich "eisenhart") überzeugt und ich habe die Utilities nochmal angepasst. Ich werde in Zukunft die Eigennamen, wie z.B. HTTP oder URL in der Pascal-Case-Schreibweise benutzen (warum das Mircrosoft selber nicht immer konsequent durchzieht, z.B. IHTMLElement oder HTMLElement in mshtml habe ich keine Ahnung). IO habe ich nicht übers Herz gebracht Io zu schreiben ... ich habe alle meine Enums, die ich gegenwärtig komplett wie Konstanten geschrieben habe (Name und Eigenschaften) auch gleich mit angepasst, alle Klassennamen und natürlich alle auch alle Methoden ... jetzt habe ich aber keine Lust mehr. Auch wusste ich nicht, dass man Projektnamen mit Punkt (.) vergeben kann und diese dann physikalisch so nicht "auf der Platte" liegen müssen - bin halt "Java-verseucht" ...

also, an alle, vielen Dank für die Hilfe und Unterstützung. Ich denke, dass ich jetzt endlich einmal "sauber" in diesem Bereich bin.

Thema: Resource laden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@herbivore,

vielen Dank. Google hatte da auch nix neues.

Gruß

Thema: Resource laden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

dieser Thread ist zwar schon ein bißchen älter als ein Jahr. Ich hätte die gleiche Frage. Gibt es mitlerweile einen anderen Workaround oder immer noch (über den Umweg zwischenkopieren) wie vor ca. einem Jahr vorgeschlagen?

Thema: NDoc bei überladenen Methoden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

gibt es einen eleganten Weg (also mit Verweisen) bei überladenen Methoden für NDoc - am besten sollte der Designer auch gleich damit zurechtkommen.

Ich mache das bisher immer so:


    /// <summary>
    /// Set the text bla
    /// </summary>
    /// <param name="text">The text</param>
    /// <param name="cultureInfo">The CultureInfo object</param>
    public static void SetText(String text, CultureInfo cultureInfo) {
      // do my work
    }

    /// <summary>
    /// <see cref="ResourceUtil.SetText(String, CultureInfo)"/>
    /// </summary>
    /// The current culture will be used
    public static void SetText(String text) {
      ResourceUtil.SetText(text, Thread.CurrentThread.CurrentCulture);
    }

Das ist ein kleines Beispiel zur Veranschaulichung. Was ich irgendwie möchte ist, ob ich jetzt z.B. für Parameter cultureInfo die Beschreibung in der referenzierten Methode inkludieren kann. Wenn ich das so lasse wie oben, dann zeigt mir der Designer lediglich den Summary text und den Zusatztext, jedoch nicht die Parameterbeschreibungen der "Basis-Methode". Geht das irgendwie (außer kopieren natürlich ;))

Gruß und danke schon mal im Voraus für etwaige Antworten

Thema: [gelöst] Verwaltung von Utilityklassen
Am im Forum: Rund um die Programmierung

@JuyJuka,

vielen Dank für den Hinweis, habe mir aber im Laufe der Zeit angewöhnt, dass ich Abkürzungen, bzw. Eigennamen, wie z.B. HTML, URL, XML usw. immer groß schreibe und nie plural verwende (das war in Java auch schon immer so) ... Misc werde ich rausnehmen, danke für den Hinweis.

Thema: [erledigt] VS 2008 Add-In Property Generator
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

@powerbond007,

vielen Dank für den Hinweis. Das Tool ist voll geil ... Eclipse is back .. sogar Open Type und Open File dabei. ... die Ladezeit merkt man auch fast nicht.

Vielen Dank, bin im (Eclipse) Himmel

Thema: [gelöst] Verwaltung von Utilityklassen
Am im Forum: Rund um die Programmierung

Hallo,

vielen Dank für die Beiträge, die Unterstütung und die Anregungen. Nach einer "ÜBER"-Schicht Refactoring schaut das bei mir nun so aus wie im Anhang. Ich habe eine Solution Common erstellt. Hier gibt es den Subordner Util. War wirklich Zeit, denn es stehen ein paar Projekte an. Ein Jahr später wäre das die totale Hölle geworden.

Thema: [erledigt] VS 2008 Add-In Property Generator
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

es gibt leider in VS nicht die Möglichkeit Properties generieren zu lassen (ich meine jetzt alle auf einmal, und nicht einzeln - letzteres würde zwar gehen, jedoch wird immer unmittelbar unter der Instanzvariable das Property eingefügt, das bedeutet, wenn man das bei mehreren ausführt, dass man dann immer ewig viel rumkopieren muss, wenn man die Instanzvariablen gerne oben stehen hat und nicht durchgemischt mit Properties im Quellcode).

Eclipse hatte das von Anfang an drinnen, daher war ich etwas enttäuscht, das ich es nicht bei VS 2005 gefunden hatte, jedoch kann ich absolut nicht verstehen, warum es nicht in VS 2008 ist. Ich vermisse das so sehr, dass ich ggf. ein eigenes PlugIn schreiben würde.

Um letzteres zu vermeiden (und nicht das Rad neu zu erfinden) einmal hier nachgefragt, ob es bereits ein nützliches Tool gibt - ich konnte nichts (für VS 2008) finden. Geht euch das nicht, wie mir, TOTAL auf den Senkel? Ist doch voll nervig, oder?

Thema: Gekapselte Threadklassen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von ErfinderDesRades


Thread serviceThread =new Thread( ((IThreadClass)serviceInstance).Run);
?

ja, hatte ich doch tatsächlich vergessen. Lustig ist schon, dass ich es erst oben richtig geposted hatte. Ich hab keine Ahnung, was mit mir heute los ist.

Vielen Dank euch allen ... aus 25 Zeilen 1 gemacht

Thema: Gekapselte Threadklassen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hm,

jetzt wollte ich das bei mir einbauen.

Das Objekt serviceInstance ist generisch erstellt worden (Activator.CreateInstance), jetzt dachte ich, dass ich folgendermaßen vorgehen kann:


// Ich muss jetzt hier ja casten
Thread serviceThread = ((IThreadClass)serviceInstance).Run;

Das funzzt aber nicht, wegen dem Cast, würde ich MyThreadClass erstellen, dann würde es gehen. Wie mache ich denn das jetzt?

Die Fehlermeldung lautet:
Cannot convert method group Run to none delegate type Thread
Hm, genau wegen dieser Fehlermeldung hatte ich die "Hilfsklasse" gecoded.

Thema: Gekapselte Threadklassen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

OK,

das wieder mal ein Thread von mir, den man gleich wieder vergessen kann ;) ... ohne eure Hilfe wäre das natürlich nicht möglich gewesen. Ich bedanke mich (ein bißchen beschämt ;)) bei euch für die Unterstützung.

Es geht mit folgendem Code ...


MyThreadClass myThreadClass = new MyThreadClass();
Thread thread = new Thread(((IThreadClass)myThreadClass).Run);
thread.Start();

Dafür braucht man natürlich keine Hilfsklasse

Thema: Gekapselte Threadklassen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Es MUSS natürlich nicht Reflection sein, jedoch hatte ich die Klasse entwickelt, um die Threads generisch erstellen zu können. [EDIT]=herbivore] ... wofür, wie sich ja oben gezeigt hat, gar keine Reflection notwendig ist.[/EDIT]