2009-03-07 7 views
0

Ich habe eine erweiterte ListView in C# WinForms geschrieben. Zweck ist es, eine Liste der aktuell laufenden Anwendungen mit dem WinAPI anzuzeigen. Wenn ich jedoch versuche, die ListView im Konstruktor zu füllen, funktioniert es, wenn ich die Anwendung ausführen, aber wenn Sie versuchen, das Steuerelement auf ein Formular zu setzen, stürzt VS 2008.Welche Methode oder welches Ereignis sollte ich verwenden, um ein erweitertes ListView vorzufüllen?

Der Grund für den Absturz ist glaube ich verursacht durch die Verwendung des ThreadPool oder die Verwendung von P/Invoke-Anrufen. Ich habe versucht, es in eine Bedingung zu schreiben, um die DesignMode-Eigenschaft zu überprüfen, aber ich habe herausgefunden, dass im Konstruktor immer false zurückgegeben wird. Um mein Problem zu lösen, habe ich die InitLayout-Methode der ListView-Basisklasse übersteuert und meinen Populationscode dort abgelegt, aber ich denke nicht, dass dies der beste Platz dafür ist.

Weiß jemand, wo der beste Platz, um meinen Vorwahlcode in einem erweiterten ListView zu platzieren?

Danke!

Hier ist, was das Update wie folgt aussieht:

protected override void InitLayout() 
{ 
    if (DesignMode) 
     return; 

    RefreshApplications(); 

    base.InitLayout(); 
} 

Antwort

2

verwenden zwischen Entwurfsmodus und Anwendung laufen zu unterscheiden:

if (LicenseManager.UsageMode != LicenseUsageMode.Designtime) 
{ 
} 
Verwandte Themen