c# Windows Form als dll laden



  • Hallo,

    habe eine Windows Form als Dll gespeichert.

    Wie kann ich nun dieses dll Formular in einer anderen Anwendung laden und instantzieren?

    Danke im voraus.



  • Ebenfalls in .NET? Indem du eine Referenz auf deine Assembly hinzufügst.



  • Zunächst Danke für deine Antwort.

    Ebenfalls in .NET? Indem du eine Referenz auf deine Assembly hinzufügst.

    Das funktioniert in dem ich ein Verweis auf die Dll hinzufüge und dann

    private fMainWindow MainForm;//Meine Dll Form
            private void Form1_Load(object sender, EventArgs e)
            {
    
                MainWindow = new fMainWindow();
                MainWindow.ShowDialog();
    

    Da meine Application aber sehr lange Ladezeiten hat möchte ich zunächst
    eine Form mit unserem Firmenlogo starten und darin dann die Hauptform
    nachladen mit LoadDll oder so.



  • hermes schrieb:

    Da meine Application aber sehr lange Ladezeiten hat möchte ich zunächst eine Form mit unserem Firmenlogo starten und darin dann die Hauptform
    nachladen mit LoadDll oder so.

    Dafür kannst du doch einfach zwei einzelne Applikationen machen:
    1. Eure Startform mit dem Firmenlogo (StartApplikation)
    2. Die HauptApplikation

    Der Anwender ruft die StartApplikation auf, die sofort erscheint mit Firmenlogo und pipapo. Dort bietest du dem Anwender evtl. Zugang zu weiteren Firmeninformationen und startest die HauptApplikation via System.Diagnostics.Start("HauptApplikation.exe");



  • Hallo,

    habe es nun mal so gemacht.
    Die Anwendung wurde als Klassenbibliothek MyApp.dll erstellt.

    using System;
    using System.Windows.Forms;
    using System.Reflection;
    namespace MyApp
    {
        public partial class Form1 : Form
        {
            private Assembly assAssembly;
            private Form fForm;
            public Form1()
            {
                InitializeComponent();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
    
                try
                {
                   assAssembly =  Assembly.LoadFrom("MyApp.dll");
                  /* Konstruktor von MyApp fMainwindow */
                   fForm = Activator.CreateInstance(assAssembly.GetType("MyApp.fMainWindow")) as Form;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    Close();
                }
                timerStartNextApp.Enabled = true;
            }
    
            private void timerStartNextApp_Tick(object sender, EventArgs e)
            {
                timerStartNextApp.Enabled = false;
                this.Hide();
                if (fForm != null)
                {
                    fForm.ShowDialog();
                    this.Show();
                    Close();
                }
            }
    

    Es muss noch ein Verweis auf MyApp.dll hinzugefügt werden.
    Frage: wird ein Verweis auf eine Dll hinzugefügt wird dann auch die Komplette Dll in den Speicher geladen oder nicht?

    Habe das Gefühl der Start dauert immer noch sehr lange.



  • Wie wäre es, wenn du in Form1_Load this.Show() reinknallst bevor da mit try / catch etwas zeitaufwendiges passieren soll?


Log in to reply