Laden...

[erledigt] Constructor missing Fehler bei Reflection

Erstellt von mosspower vor 15 Jahren Letzter Beitrag vor 15 Jahren 717 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren
[erledigt] Constructor missing Fehler bei Reflection

Hallo "Kollegen",

folgender Quellcode:

public class MyThread {

    public MyThread() {

    }

    public void Run() {
      while(true) {
        Console.WriteLine("Thread is running ...");
        Thread.Sleep(1000);
      }
    }
  }
 
  public class Program {
    public static void Main() {
      try {
        Object serviceInstance = Activator.CreateInstance(typeof(MyThread).GetType());
        Type type = serviceInstance.GetType();
        MethodInfo methodInfo = type.GetMethod("Run");

        ThreadStart threadStart = (ThreadStart)
          Delegate.CreateDelegate(type, serviceInstance, methodInfo);

        Thread thread = new Thread(threadStart);
        thread.Start();

      }
      catch(Exception ex) {
        Console.WriteLine(ex.Message + ex.StackTrace);
      }

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

Fehlermeldung (gleich in der ersten Zeile bei CreateInstance)

No parameterless constructor defined for this object

Ist es jetzt zu spät oder worauf stehe ich jetzt? Ich habe doch einen Konstruktor drinnen und bin da jetzt schon über eine Stunde drüber ... ich mag heute erst mal nicht mehr. Vielleicht kann mir jemand helfen oder morgen früh fällt es mir wie Schuppen von den Haaren.

Gute N8 und vielen Dank für evtl. Antworten

F
722 Beiträge seit 2005
vor 15 Jahren

statt


Object serviceInstance = Activator.CreateInstance(typeof(MyThread).GetType());

das:


Object serviceInstance = Activator.CreateInstance(typeof(MyThread));

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 15 Jahren

Vielen Dank. Es war noch ein kleiner Fehler drinnen. Die Lösung sieht nun so aus:

 public class MyThread : IThread {
    public void Run() {
      while(true) {
        Console.WriteLine("Thread is running ...");
        Thread.Sleep(1000);
      }
    }
  }
  
  public class Program {
    public static void Main() {
      try {
        Object serviceInstance = Activator.CreateInstance(typeof(MyThread));
        Type type = serviceInstance.GetType();
        MethodInfo methodInfo = type.GetMethod("Run");

        ThreadStart threadStart = (ThreadStart)Delegate.
          CreateDelegate(typeof(ThreadStart), serviceInstance, methodInfo);
        Thread thread = new Thread(threadStart);
        thread.Start();
      }
      catch(Exception ex) {
        Console.WriteLine(ex.GetType().FullName + ex.Message + ex.StackTrace);
      }

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

Jetzt kann ich Thrads so benutzen wie in Java (ist halt schöner gekapselt)

Gruß