Frage

Ich dekompiliere eine DLL in C #.Eines der vom Dekompiler generierten Projekte enthält über 1000 fehlerhafte Zeilen, die wie folgt aussehen:

this.pictureBox1.BeginInit();

Fehler 385 'System.Windows.Forms.PictureBox' enthält keine definition für 'BeginInit' und keine Erweiterungsmethode 'BeginInit' akzeptieren eines ersten Arguments vom Typ 'System.Windows.Forms.Bilderbox' könnte gefunden werden (fehlt Ihnen eine using-Direktive oder eine Assembly referenz?)

Es gibt keine BeginInit() -Methode für reguläre Picturebox .Ich habe einfach die Zeilen auskommentiert:

//this.pictureBox1.BeginInit();

Dann habe ich die Ausgabe eines anderen Dekompilers untersucht, sie sieht wie folgt aus und der VS-Compiler hat keinen vorherigen Fehler:

((ISupportInitialize)this.pictureBox1).BeginInit();

Wegen eines Absturzes konnte ich mit dem zweiten Decompiler nicht alle Quellen auf einmal exportieren.Jetzt bin ich mir nicht sicher, was ich tun soll.Ich konnte das Projekt nicht ausführen und debuggen, da andere Fehler zuerst behoben werden müssen.Meine Optionen sind:

  1. Kommentiere einfach die Zeilen aus.
  2. Ändern und Einfügen des Tags (ISupportInitialize).
  3. Erstellen Sie nach Möglichkeit eine Erweiterungsmethode.

Die letzte Option scheint mir am einfachsten zu sein.Kann ich die Erweiterungsmethode BeginInit () erstellen, funktioniert sie problemlos?Und wie kann ich ISupportInitialize implementieren und verwenden?

War es hilfreich?

Lösung

Versuchen Sie dies:

public static class PictureBoxExtension {
   public static void BeginInit(this PictureBox pb){
     ((ISupportInitialize)pb).BeginInit();
   }
}

Oder noch besser, Sie können dies für alle Steuerelemente versuchen, die dies unterstützen ISupportInitialize.Dies ist vor dem normalen Zugriff verborgen, da es implementiert ist explizit, damit wir diese Erweiterung verwenden können, um sie freizulegen (ohne Casting):

public static class SupportInitExtension {
   public static void BeginInit<T>(this T c) where T : ISupportInitialize {
     c.BeginInit();
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top